2017-03-13 144 views
2

有人能告诉我为什么state.set导致未定义。Redux state.set导致未定义

我有一个减速,像这样:

const initialState = fromJS({ 
    description: 'default_description', 
}); 

function helpReducer(state = initialState, action) { 
    switch (action.type) { 
    case DEFAULT_ACTION: 
     return state; 
    case CHANGE_DESCRIPTION: 
     console.log('Change Description reducer action.data: '+action.data); //results in string say foo 
     console.log('state: '+state); //results in valid state on first call 
     return state 
     .set('description':action.data); 
    default: 
     return state; 
    } 
} 

我第一次打电话的动作CHANGE_DESCRIPTION,state = default_description

致电state.setstate.description = undefined

我以前使用过state.set,但我不确定它现在失败的原因。

的行动被称为一个子组件,如下所示:

家长:

export class FOO extends React.PureComponent { 
    constructor(props){ 
    super(props); 
    } 
    render() { 
    return (
     <div> 
     <FOOForm onChange={this.props.changeDescription} /> 
     </div> 
    ); 
    } 
} 

function mapDispatchToProps(dispatch) { 
    return { 
    dispatch, 
    changeDescription: (e) => dispatch(changeDescription(e.target.value)) 
    }; 
} 

富表格演示的缘故:

function fooForm(props){ 
return <FormControl onChange={props.onChange} componentClass="textarea" />; 

} 
+0

没有看到其余的代码,我会假设action.data是未定义的。你可以在交换机之前使用console.log'action.data'来查看它是否持有你想要的内容/ –

+0

Action.data是明确定义的。当我console.log每次我得到正确的值。 – Turtle

+0

为什么不只是'''返回action.data'''。它会自动改变减速器状态。就像在文档中http://redux.js.org/docs/basics/Reducers.html – Bonanza

回答

1

我不知道的上下文中你实现你的reducer,但我相信不变JS的语法应该使你的设置看起来像这样:

return state.set('description', action.data)

请注意,您需要传递属性和值作为参数,而不是作为键值对。

+0

Aaa我相信你是对的!谢谢!! – Turtle

+0

太棒了!很高兴能帮到你! –