2017-03-13 6 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)) 
    }; 
} 

Fooのフォーム::

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

} 
+0

残りのコードは表示されませんが、action.dataは定義されていないと思います。スイッチの前にconsole.logの 'action.data'を入れて、あなたが望むものを保持しているかどうかを確認できます/ –

+0

Action.dataが明確に定義されています。私はconsole.logときに毎回正しい値を取得します。 – Turtle

+0

なぜ '' 'return action.data'''をしないのですか?減速機の状態が自動的に変更されます。ドキュメントのようにhttp://redux.js.org/docs/basics/Reducers.html – Bonanza

答えて

1

私はわからないんだけど

親あなたのレデューサーを実装するコンテクストですが、私は不変のJSの構文は、このようにあなたのセットを作る必要があります:

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

プロパティと値を引数として渡し、キー値のペアではなく渡す必要があることに注意してください。

+0

Aaa私はあなたが正しいと信じています!ありがとうございます! – Turtle

+0

素晴らしい!嬉しいです! –

関連する問題