javascript - 当 redux 状态改变时,react 无法重新渲染

标签 javascript reactjs redux react-redux

我是 React 和 Redux 的初学者。我想制作待办事项列表应用程序。但是当我将列表插入商店时,displayList() 函数不会重新渲染。我该如何解决这个问题。

这是我的 reducer 代码。

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,而是返回[ ... state, action.payload.item ]

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

这是因为 React 会看到新状态(对象引用)等于旧状态,并决定不重新渲染,因为看起来什么都没有改变

关于javascript - 当 redux 状态改变时,react 无法重新渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40912038/

相关文章:

无法从 Angular ui-view 内部访问 Javascript

javascript - 了解 React.js 中的搜索过滤如何工作

reactjs - 如何将事件监听器添加到引用?

javascript - react 路由器页面无法刷新

javascript - 由于状态突变,Redux 操作未在 reducer 中捕获

javascript - 处理 Redux 状态的函数的名称(例如 reducer 和选择器)

Javascript,使用下划线(或不使用)转换对象

javascript - JavaScript 检查字符串是否包含特定数字

javascript - 用每小时差异值填充数组/列表 - 给定下拉列表中的两个时间值

reactjs - 如何使变量可用于组件中的每个方法?