【发布时间】:2018-09-11 19:51:59
【问题描述】:
我正在尝试使用 React 和 Redux 编辑一个对象并在数组中替换它,如下所示:
case EDIT_LANGUAGE:
let languages = [...state.languageSkills];
languages[languages.findIndex(el => el.id === action.payload.id)] = action.payload;
return {
...state,
languageSkills: languages
};
'languages' 数组在 return 语句之前查找 find,但不会重新呈现状态。我想我正在以某种方式改变状态。其他操作(删除、获取、设置)工作正常。有什么建议吗?
编辑。这是应该呈现的组件的相关部分
import { setLanguages, getLanguages } from '../../actions';
import {connect} from 'react-redux';
import {bindActionCreators} from "redux"
import React, { Component } from 'react';
class UserProfile extends Component {
constructor(props) {
super(props);
}
render() {
const languageSkillItems = this.props.languageSkills.map((languageSkill) => {
return (
<LanguageSkillItem key={languageSkill.id} item={languageSkill} />
)
});
return (
<div className="profile">
<Language languageSkillItems={languageSkillItems} />
</div>
)
}
}
const mapStateToProps = (state) => {
return {
languageSkills: state.languageSkills
};
};
const mapDispatchToProps = dispatch => {
return {
...bindActionCreators({ setLanguages, getLanguages }, dispatch)
}
};
export default connect(
mapStateToProps,
mapDispatchToProps
)(UserProfile
);
【问题讨论】:
-
payload是如何创建的——新对象?
-
dashton 的答案是正确的。要遵循的基本规则是避免
redux中的突变 => 永远不要改变状态 -
我认为
render正在被触发?<Language />长什么样子? -
渲染实际上没有被触发。我明天要进行一些重构,整个设计还不错……不太好。
标签: reactjs react-redux