当 redux 中的状态更改时,反应无法重新渲染
react cannot re-render when state change in redux
我是 React 和 Redux 的初学者。我想制作 todolist 应用程序。但是当我将列表插入商店时,displayList() 函数不会重新呈现。我该如何解决这个问题。
这是我的减速器代码。
export default function(state = ['start1','start2'], actions) {
switch(actions.type) {
case 'APPEND_ITEM':
state.push(actions.payload.item)
return state
break
}
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 {
displayList(){
return this.props.dispatchs.map((item) => {
return(
<li key={ Math.random() }>{item}</li>
)
})
}
render(){
return(
<div>
{ this.displayList() }
</div>
)
}
}
var mapStateToProps = (state) => {
return {
dispatchs: state.dispatch
}
}
export default connect(mapStateToProps)(TodoList)
pin 2,3 does not re-render on the screen
感谢您的帮助。
而不是在reducer中使用push,return [ ... state, action.payload.item ]
case 'APPEND_ITEM':
return [ ...state, action.payload.item ]
这是因为 React 将看到与旧状态相同的新状态(对象引用),并决定不重新渲染,因为看起来什么都没有改变
我是 React 和 Redux 的初学者。我想制作 todolist 应用程序。但是当我将列表插入商店时,displayList() 函数不会重新呈现。我该如何解决这个问题。
这是我的减速器代码。
export default function(state = ['start1','start2'], actions) {
switch(actions.type) {
case 'APPEND_ITEM':
state.push(actions.payload.item)
return state
break
}
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 {
displayList(){
return this.props.dispatchs.map((item) => {
return(
<li key={ Math.random() }>{item}</li>
)
})
}
render(){
return(
<div>
{ this.displayList() }
</div>
)
}
}
var mapStateToProps = (state) => {
return {
dispatchs: state.dispatch
}
}
export default connect(mapStateToProps)(TodoList)
pin 2,3 does not re-render on the screen
感谢您的帮助。
而不是在reducer中使用push,return [ ... state, action.payload.item ]
case 'APPEND_ITEM':
return [ ...state, action.payload.item ]
这是因为 React 将看到与旧状态相同的新状态(对象引用),并决定不重新渲染,因为看起来什么都没有改变