Javascript React/Redux无法读取属性“;“当前机遇”;未定义的
我的Redux mapStateToProps函数抛出一个错误,表示state.currentOpportunities未定义,但遇到问题。奇怪的是,organizationReducer中定义的初始状态只能在State.\u root.entries.organization.currentOpportunity下到达,而不是在主index.js文件中的I console.log I console.log状态下通过State.organization.currentOpportunity到达Javascript React/Redux无法读取属性“;“当前机遇”;未定义的,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我的Redux mapStateToProps函数抛出一个错误,表示state.currentOpportunities未定义,但遇到问题。奇怪的是,organizationReducer中定义的初始状态只能在State.\u root.entries.organization.currentOpportunity下到达,而不是在主index.js文件中的I console.log I console.log状态下通过State.organization.currentOpportunity到达
const mapStatetoProps = (state) => {
console.log(state)
return {
currentOpportunities: state.organization.currentOpportunities,
expiredOpportunities: state.organization.expiredOpportunities
};
}
export default connect(mapStatetoProps, actions)(OpportunitiesPage);
主App.js文件
const initialState = {}
const history = createHistory();
const store = configureStore(initialState, history);
const MOUNT_NODE = document.getElementById('app');
const render = messages => {
ReactDOM.render(
<Provider store={store}>
<LanguageProvider messages={messages}>
<ConnectedRouter history={history}>
<App />
</ConnectedRouter>
</LanguageProvider>
</Provider>,
MOUNT_NODE,
);
};
我的根还原文件
export default function createReducer(injectedReducers) {
return combineReducers({
organization: organizationReducer,
...injectedReducers
})
}
index.js文件
const mapStatetoProps = (state) => {
console.log(state)
return {
currentOpportunities: state.organization.currentOpportunities,
expiredOpportunities: state.organization.expiredOpportunities
};
}
export default connect(mapStatetoProps, actions)(OpportunitiesPage);
有人知道这里可能发生什么吗?state.organization.currentOpportunity未定义,因为state是一个不可变的映射,您试图像访问对象一样访问它的字段 您必须更新reducer逻辑以使用合并对象的不可变API,例如 或者从不可变的数据结构转换为可变的javascript对象。e、 g
stateObject = state.toJS()
return {
currentOpportunities: stateObject.organization.currentOpportunities,
//...
由于跟踪对象实例的状态可能会带来一些麻烦,因此我建议在组件状态中使用不可变的数据结构或可变的Javascript对象
下面是使用不可变映射API的MapStateTops
state.organization.currentOpportunity
未定义,因为state是一个不可变映射,您试图像访问对象一样访问它的字段
您必须更新reducer逻辑以使用合并对象的不可变API,例如
或者从不可变的数据结构转换为可变的javascript对象。e、 g
stateObject = state.toJS()
return {
currentOpportunities: stateObject.organization.currentOpportunities,
//...
由于跟踪对象实例的状态可能会带来一些麻烦,因此我建议在组件状态中使用不可变的数据结构或可变的Javascript对象
下面是使用不可变映射API的MapStateTops
你能访问组织减速器吗?我的意思是,你能用Redux开发工具检查一下它,看看里面有什么吗?我检查了Redux开发工具,它看起来像是在状态选项卡下的@init下,它将currentOpportunities和expiredOpportunities的组织初始化值显示为reducer中的空数组。@riku12764,您的
操作有效负载的结构是什么?也许你还想再次检查为什么在获取组织机会
中有一个数据
键。你的InjectedReducer里面是什么?@George.s,目前InjectedReducer里面什么都没有(只是一个占位符,直到我让它在最基本的层面上工作),你能访问ORGANIZATION reducer吗?我的意思是,你能用Redux开发工具检查一下它,看看里面有什么吗?我检查了Redux开发工具,它看起来像是在状态选项卡下的@init下,它将currentOpportunities和expiredOpportunities的组织初始化值显示为reducer中的空数组。@riku12764,您的操作有效负载的结构是什么?也许你还想再次检查为什么在获取组织机会
中有一个数据
键。你的injectedReducers里面是什么?@George.s,目前injectedReducers里面什么都没有(只是一个占位符,直到我让它在最基本的层面上工作)。
是最重要的。mapstatetops
的返回是一个新对象,因此在组件中使用props
时,它根本不会修改state
。因此,这并没有直接回答问题,只是建议使用其他库。@codekaizer我不是建议使用其他库。该库已经被使用,但OP似乎将Javascript对象与不可变映射实例混淆。我建议OP坚持在状态中使用Javascript对象,或者使用不可变映射对象。嗨@OluwafemiSule,我尝试了上面的建议,但我得到了与以前相同的错误。据我所知,似乎MapStateTops在操作运行之前就已经发生了。仍然不确定问题出在哪里,…
是问题的关键。mapstatetops
的返回是一个新对象,因此在组件中使用props
时,它根本不会修改state
。因此,这并没有直接回答问题,只是建议使用其他库。@codekaizer我不是建议使用其他库。该库已经被使用,但OP似乎将Javascript对象与不可变映射实例混淆。我建议OP坚持在状态中使用Javascript对象,或者使用不可变映射对象。嗨@OluwafemiSule,我尝试了上面的建议,但我得到了与以前相同的错误。据我所知,似乎MapStateTops在操作运行之前就已经发生了。但仍然不确定问题出在哪里
return {
currentOpportunities: state.getIn(['organization', 'currentOpportunities'])
//...