【发布时间】:2019-10-11 22:43:15
【问题描述】:
我有一个表格组件来显示一些数据。在调度一个动作之后,状态中的表数据正在改变。但是我的表格组件没有更新。只有当我单击表格另一行中的另一个单选按钮时,它才会更新。我希望我的组件在数据更改时重新呈现。这是我的代码:
const mapStateToProps = state => ({
evaluationData: evaluationResultsSelector(state)
});
const mapDispatchToProps = dispatch => ({
setSelectedEvaluationRecord: record =>
dispatch(setSelectedEvaluationRecord(record))
});
export default connect(mapStateToProps,
mapDispatchToProps
EvaluationDataTable,
);
我的组件是这样的:
import React from 'react';
import Table from 'antd/lib/table';
import 'antd/lib/table/style/css';
import "antd/dist/antd.css";
import { columnEvaluation } from './evaluationDataStructure';
class EvaluationDataTable extends React.Component {
constructor(props) {
super(props);
this.state = {
selectedRowKeys: [0], // Check here to configure the default column
};
}
// shouldComponentUpdate(prevProps, prevState) {
// return (prevProps.results !== this.props.results || prevState.selectedRowKeys !== this.state.selectedRowKeys);
// }
onRowChange = selectedRowKeys => {
if (selectedRowKeys.length > 1) {
const lastSelectedRowIndex = [...selectedRowKeys].pop();
this.setState({ selectedRowKeys: lastSelectedRowIndex });
}
this.setState({ selectedRowKeys });
};
onRowSelect = (record) => {
this.props.setSelectedEvaluationRecord(record)
};
render() {
const { selectedRowKeys } = this.state;
const rowSelection = {
type: 'radio',
selectedRowKeys,
onChange: this.onRowChange,
onSelect: this.onRowSelect
};
return (
<React.Fragment>
<div style={{ marginBottom: 16 }} />
<Table
rowSelection={rowSelection}
columns={columnEvaluation}
dataSource={this.props.evaluationData}
/>
</React.Fragment>
);
}
}
export default EvaluationDataTable;
当我在另一行中单击时,表格会在触发我的 setState 时重新呈现,但是当数据被更改时,表格不会重新呈现。只有当我点击另一行时。如何处理?非常感谢
我的使表发生变异的减速器是这样的:
case ACTION_TYPES.EDIT_EVALUATION_RESULTS: {
const evaluationResults = state.evaluationResults;
const editedRecord = action.payload.editedEvaluationData;
evaluationResults.forEach((item, i) => {
if (item.id === editedRecord.id) {
evaluationResults[i] = editedRecord;
}
});
return {
...state,
evaluationResults
};
}
【问题讨论】:
-
问题可能与您的减速器设置有关。你能发布你的代码吗?
-
@ChristopherNgo 你说的太对了..我把这个评估结果改成这个评估结果:[...评估结果]
-
哈哈是的,我看到了……你正在做一个状态突变。我只是要告诉你把它散布在一个新的数组中。很高兴您花时间弄清楚并了解了更多有关 redux-principles 的知识。
-
非常感谢!!如果您想将此添加为答案以获得更多积分。 ;)
-
非常感谢 :)
标签: javascript reactjs state antd react-props