gpt4 book ai didi

javascript - 状态改变时 Mobx 不更新

转载 作者:行者123 更新时间:2023-12-01 16:18:56 25 4
gpt4 key购买 nike

我正在使用带有 mbox 的 react-table 并且遇到了我的状态未更新的问题。

我有一张这样的 table

<ReactTable
data={data}
columns={columns}
showPageSizeOptions={false}
resizable={false}
className="-striped -highlight"
defaultPageSize={12}
filterable={true}
/>

一列有
{
Header: "",
accessor: "checkbox",
filterable: false,
width: 35,
Cell: ({ original }) => {
return (
<input
type="checkbox"
className="checkbox"
checked={employeeUiStore.selectedEmployees.indexOf(original.id) >= 0 }
onChange={() => employeeUiStore.toggleCheckbox(original.id)}
/>
);
}
},

和这样的商店
class EmployeeUiStore {
@observable addMode = false;
@observable selectedEmployees = []
constructor(){}
@action
toggleCheckbox(employeeId) {
const index = this.selectedEmployees.indexOf(employeeId);
if(index === -1){
this.selectedEmployees = [...this.selectedEmployees, employeeId];
}else {
const newSelectedEmployees = [...this.selectedEmployees];
newSelectedEmployees.splice(index, 1);
this.selectedEmployees = newSelectedEmployees;
}
}
@action
toggleAddEmployee(){
this.addMode = !this.addMode;
}
}
export default EmployeeUiStore;

奇怪的是,如果我在我的代码中添加这样的东西
console.log(employeeUiStore.selectedEmployees.indexOf(0) >= 0)

然后状态将正确更新,但是当我删除此行时,没有任何更新。

我看到我的 toggleCheckbox 被触发并且状态正在更新。

我在这个组件上也有@observer。

最佳答案

当您通过 data 时,您不会取消引用任何内容数组到 ReactTable零件。

您可以通过 using slice or peek 解决此问题。在将数组传递给外部库之前在数组上:

<ReactTable
data={data.slice()}
columns={columns}
showPageSizeOptions={false}
resizable={false}
className="-striped -highlight"
defaultPageSize={12}
filterable={true}
/>

MobX 中也不需要不变性。您可以立即更改数组:
class EmployeeUiStore {
@observable addMode = false;
@observable selectedEmployees = [];

@action
toggleCheckbox(employeeId) {
const index = this.selectedEmployees.indexOf(employeeId);
if (index === -1) {
this.selectedEmployees.push(employeeId);
} else {
this.selectedEmployees.splice(index, 1);
}
}

@action
toggleAddEmployee(){
this.addMode = !this.addMode;
}
}

export default EmployeeUiStore;

关于javascript - 状态改变时 Mobx 不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51272656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com