2016-12-01 23 views
0

私は反応が始まっています&還元しています。私はtodolistアプリを作りたい。しかし、ストアにリストを挿入すると、displayList()関数は再レンダリングされません。どうしたらいいですか?還元状態で状態が変化した場合、反応は再描画できません

これは私のレデューサーコードです。

export default function(state = ['start1','start2'], actions) { 
 
\t switch(actions.type) { 
 
\t \t case 'APPEND_ITEM': 
 
\t \t \t state.push(actions.payload.item) 
 
\t \t \t return state 
 
\t \t \t break 
 
\t } 
 
\t return state 
 
}

そして、これは私のtodolist.jsコードです。

import {bindActionCreators} from 'redux'; 
 
import {connect} from 'react-redux'; 
 
import ReactDOM from 'react-dom' 
 
import React from 'react' 
 

 
class TodoList extends React.Component { 
 
\t displayList(){ 
 
\t \t return this.props.dispatchs.map((item) => { 
 
\t \t \t return(
 
\t \t \t \t <li key={ Math.random() }>{item}</li> 
 
\t \t \t) 
 
\t \t }) 
 
\t } 
 
\t render(){ 
 
\t \t return(
 
\t \t \t <div> 
 
\t \t \t \t { this.displayList() } 
 
\t \t \t </div> 
 
\t \t) 
 
\t } 
 
} 
 

 
var mapStateToProps = (state) => { 
 
\t return { 
 
\t \t dispatchs: state.dispatch 
 
\t } 
 
} 
 

 
export default connect(mapStateToProps)(TodoList)

pin 2,3 does not re-render on the screen

助けてくれてありがとう。代わりに、減速にプッシュを使用

答えて

1

、戻り[...状態、action.payload.item]

case 'APPEND_ITEM': 
    return [ ...state, action.payload.item ] 

これは古いものに等しい新しい状態(オブジェクト参照)が表示される反応するためであります何も変わっていないように見えるので、再レンダリングしないことを決定します。

+0

これは機能します。どうもありがとうございました。 –

+0

@ChunRapeepatあなたが普及している演算子にまだ慣れていないなら、 'push()'を 'concat()'に置き換えてみてください。覚えておいてください。Reduxに変異はありません。 –

+0

また、todoリストキーの 'Math.random()'メソッドを置き換えて、代わりに配列のインデックスを使用してください。新しいtodoが 'Math.random()'の "randomness"のために別のものと同じ値を取得するかどうかを誰が知っていますか? –

関連する問題