react-native - React native - Redux - 无法访问状态变量
问题描述
情况
我正在尝试在我的本机应用程序中实现 redux 状态管理。下面的例子非常简单。当用户登录后,应用程序会将授权令牌保存到 keychain/keystore 和 redux store。
按照教程,我创建了以下内容action
:
export const SET_TOKEN = 'SET_TOKEN'
export const setToken = (token) => {
return {
type: SET_TOKEN,
payload: token
}
}
我还创建了减速器:
export const tokenReducer = async (state={token: ''}, action) => {
switch (action.type) {
case SET_TOKEN:
return {
...state,
token: action.payload
}
default:
return state
}
}
const rootReducer = combineReducers({
groups: groupsReducer,
token: tokenReducer
});
export default rootReducer
然后我将 Login 组件连接到 redux 存储:
class Login extends Component {...}
function mapStateToProps(state) {
return {
token: state.token
}
}
const mapDispatchToProps = (dispatch) => {
return {
setToken: (token) => dispatch(setToken(token))
}
}
export default connect(mapStateToProps, mapDispatchToProps)(Login)
我使用react navigation
,所以在App.js
我有以下代码。
import {createStore} from 'redux';
import {Provider} from 'react-redux';
import rootReducer from "./src/store/reducers/reducers";
const store = createStore(rootReducer);
const AppContainer = createAppContainer(SwitchStack)
export default class App extends Component {
render() {
return (
<Provider store={store}>
<AppContainer/>
</Provider>
);
}
}
这都是根据react navigation
和redux
文档。
问题
当我打印this.props
in 时componentDidMount
,我可以在 props 对象中看到令牌键。问题是这个token
对象没有字符串值。相反,我可以看到Promise
. tokenReducer
到目前为止我尝试过的任何东西,返回undefined
或错误。当我触发该login
功能时,该操作将令牌保存在商店中,然后我在道具中看到实际价值,其形式为Promise {_55: {token: 'tokenValue'}}
问题
如何从商店获取实际令牌?
解决方案
问题在于async
您的tokenReducer
函数声明。
async 函数隐式返回 Promise 作为结果,并且该 promise 对象作为 prop 传递给 react 组件(如您所见)。Reducers 应该只返回一个新的状态值,并且不应该包含异步代码。
要解决您的问题,只需async
从减速器功能中删除修饰符。
export const tokenReducer = (state={token: ''}, action) => {...}
推荐阅读
- python-3.x - 有没有办法注释 numpy 数组的 dtype?(PEP 3107)
- java - 在 helidon 项目中自动添加 openapi 文件
- phpunit - 致命错误的 PHPUnit 集成测试:允许的内存大小已用完
- r - 用函数创建复杂的公式
- javascript - 如何使用参数 ind d3.selectAll('line').each
- sapui5 - SAP custom translations for standard SAPUI5 application
- python - 列表的唯一列表
- image-processing - Tesseract OCR,字幕提取预处理
- python - 根据记录的大小/数量在 pandas 中删除记录的优雅方法
- r - 图例和多个 geom_line