2017-06-21 24 views
0

私のInspectorOptionコンポーネントの1つをクリックすると、reduxロガーはアクションがディスパッチされ、状態が期待どおりに更新されることを示します。アクションがディスパッチされ、状態更新が行われたときにコンポーネントが再レンダリングされない

My InspectorSelectとchildren InspectorOptionコンポーネントは、react-reduxのmapStateToPropsへの接続を使用します。これらのコンポーネントは、stateから来たものに依存します。

しかし、状態が更新されており、コンポーネントが状態に依存している場合でも、状態が更新されると、コンポーネントは再レンダリングされません。

状態が変わったときにコンポーネントが再レンダリングされないのはなぜですか?これを修正するにはどうすればよいですか?

@connect((state) => { 
    return { 
     options: state.inspector.options 
    } 
}) 
export default class InspectorSelect extends Component { 
    render() { 
     return (
      <div> 
       { 
        this.props.options.map(option => { 
         return <InspectorOption 
          option={ option } 
          key={ option.id } 
         /> 
        }) 
       } 
      </div> 
     ) 
    } 
} 

https://github.com/caseysiebel/dashboard/blob/master/src/components/InspectorSelect.js#L17

+0

時間の99.9%は、レデューサー(またはコード内の他の場所)でRedux状態が誤って突然変異したためです。 http://redux.js.org/docs/faq/ReactRedux.html#react-not-rerenderingを参照してください。 – markerikson

+0

前のコメントの状態と同じように、おそらく状態の突然変異が原因です。あなたのレデューサーを投稿すると誰かがエラーを見つけられる可能性があります –

答えて

2

@markeriksonが指摘したように:時間の99.9%を、それが減速して

Reduxの状態の偶発変異によるものだdashboard/src/reducers/inspector.js

export default function reducer(state = { 
    options: [] 
}, action) { 

    switch (action.type){ 
     case 'SET_INSPECTOR': 
      state.options = state.options.map(option => { // <-- mutation here 
       return option.id === action.payload ? 
        { ...option, active: true } : 
        { ...option, active: false } 
      }) 
      return state // returning mutated state 
     default: 
      return state 
    } 
} 
の変異があります

export default function reducer(state = { 
    options: [] 
}, action) { 

    switch (action.type){ 
     case 'SET_INSPECTOR': 
      var newOptions = state.options.map(option => { 
       return option.id === action.payload ? 
        { ...option, active: true } : 
        { ...option, active: false } 
      }); 
      return {...state, options: newOptions} // returning new state 
     default: 
      return state 
    } 
} 
+1

良い目! :)はい、それは '状態'の突然変異になるでしょう。 – markerikson

+0

ありがとう!それがそれでした。 – Casey

関連する問題