【发布时间】:2019-11-10 22:06:25
【问题描述】:
我可以从我的组件中更改存储和状态,但我无法访问它。
我是编程新手,我对 React + Redux 有疑问。我的应用程序有几个页面与 react-router 连接,我使用 Redux 保存表单字段中的输入。
const insuranceReducer = (state = {
productName: ""
}, action) => {
switch(action.type) {
case "UPDATE_FORM":
if(action.payload.productName){
state = {
...state,
productName: action.payload.productName
}
}
return state;
} }
商店是用
创建的const store = createStore(insuranceReducer, applyMiddleware(myLogger));
store.subscribe(() => {
console.log("store updated", store.getState());
})
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root'));
我可以使用此代码通过组件的调度来更改它
const mapDispatchToProps = (dispatch) => {
return {
handleChange: (event) => {
dispatch({
type:"UPDATE_FORM",
payload: {[event.target.name]: event.target.value}
})
}
};
};
export default connect(mapStateToProps, mapDispatchToProps)(FormComp);
这行得通!!!我有一个输入字段的 onChange 和存储控制台中的中间件记录更改。一切都很好,直到我尝试使用 mapStateToProps。这给了我未定义的状态。我尝试用这个访问它
const mapStateToProps = state => {
console.log(state);
return {
name: state.productName,
}
}
它给出错误“无法读取未定义的属性产品名称”,并且状态的控制台日志未定义。请给我一些关于为什么这不起作用的想法。我对另一个项目有几乎相同的设置并且它正在工作。它可以连接到 React 路由器,因为我没有在其他项目中使用它吗?向商店发送操作可以工作并更改状态,但我无法访问它。抱歉,如果帖子内容不是很丰富,我仍然不习惯发布问题。
【问题讨论】:
-
尝试删除
store.subscribe部分。