gpt4 book ai didi

javascript - Redux 状态在 mapStateToProps 中未定义

转载 作者:行者123 更新时间:2023-12-03 13:02:28 24 4
gpt4 key购买 nike

我目前正在关注this教程。我在以下代码中遇到了一些涉及 mapStateToProps 的问题:

import React from 'react';
import Voting from './voting';
import {connect} from 'react-redux';

const mapStateToProps = (state) => {
return {
pair: state.getIn(['vote','pair']),
winner: state.get('winner')
};
}

const VotingContainer = connect(mapStateToProps)(Voting);
export default VotingContainer;

这是导入的投票组件:

import React from 'react';
import Vote from './Vote';
import Winner from './winner';

const Voting = ({pair,vote,hasVoted,winner}) =>
<div>
{winner ? <Winner winner={winner}/> :
<Vote pair={pair} vote={vote} hasVoted={hasVoted}/>
}
</div>

export default Voting;

它应该从 pair 属性中渲染两个按钮。 vote 属性是一个将在点击时执行的函数,hasVoted 在 true 时禁用按钮,并且 Winner 仅渲染获胜者组件,如图所示。

状态应该是一个如下所示的 immutableJS 映射:

Map({
vote:{
pair:List.of('Movie A','Movie B')
}
});

相反,我收到一条错误消息,指出 state.getIn 行中的状态未定义。

设置状态的代码位于索引:

const store = createStore(reducer);

const socket = io(document.location.protocol + '//' + document.location.hostname + ':8090');
socket.on('state', state => store.dispatch({
type: 'SET_STATE',
state
}));

我在设置后记录了 store.getState(),它符合预期,但在 mapStateToProps未定义。我还在上面的上下文中记录了状态变量,它也符合预期。

我也正常设置了状态,而且它出奇地有效!:

store.dispatch({
type: 'SET_STATE',
state: {
vote: {
pair: ['Movie A', 'Movie B']
}
}
});

上面的状态值正是从服务器接收到的值

最后,这是我的 reducer 的样子:

import React from 'react';
import {Map, fromJS} from 'immutable';

const reducer = (state = Map(), action) => {
switch (action.type) {
case 'SET_STATE':
return state.merge(action.state);
}
}

export default reducer;

我做错了什么?

编辑:我意识到 mapStateToPropsstore.dispatch() 之后没有被调用。我浏览了docs由于可能的原因 mapStateToProps 没有被调用,而且它不是其中之一。

最佳答案

您的 reducer 在 switch 语句中没有默认操作。这就是为什么即使您在 reducer 参数中提到了初始状态,未定义也会作为存储初始状态返回

import React from 'react';
import {Map,fromJS} from 'immutable';

const reducer = (state = Map() ,action) => {
switch(action.type){
case 'SET_STATE': return state.merge(action.state);
default:
return state;
}
}

export default reducer;

添加默认语句将解决该问题:)

关于javascript - Redux 状态在 mapStateToProps 中未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38976134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com