如何解决如何使用React Hooks API的索引转换this.state
我正在将React组件从类转换为函数。我能够更改大多数代码,但是我一度陷入困境。特别是this.state
具有 index :
const sortRows = (rows,property,sortBy) => {
if (this.state[sortBy] === 'asc'){
rows.sort(function(a,b){
if (a[property] !== null && b[property] !== null){
return a[property].localeCompare(b[property]);}
})
}
if (this.state[sortBy] === 'desc'){
rows.sort(function(a,b){
if (a[property] !== null && b[property] !== null){
return b[property].localeCompare(a[property]);}
})
}
return rows
}
rows = sortRows(rows,"field_firstname","sortFirstName");
解决方法
假设排序回调正在执行您希望它们执行的操作,并且它们在您将其发布后可以正常工作,则应首先将MainMsg* mainMsg = main_msg__unpack(nullptr,BUFFERLEN,BUFFER);
if (! mainMsg) {
// error
return;
}
SubMsg **subMsgs = mainMsg->msgs;
...
定义为状态变量:
sortBy
然后让您的const [sortBy,setSortBy] = useState('asc'); // set here your default
函数使用该状态变量的值。
sortRows
然后可以使用设置器更新const sortRows = (rows,property) => {
if (sortBy === 'asc'){
rows.sort(function(a,b){
if (a[property] !== null && b[property] !== null) {
return a[property].localeCompare(b[property]);
}
});
} else if (sortBy === 'desc'){
rows.sort(function(a,b){
if (a[property] !== null && b[property] !== null) {
return b[property].localeCompare(a[property]);
}
});
}
return rows;
};
状态变量的值:
sortBy
如果您的setSortBy('asc');
setSortBy('desc');
实际上是用于对多个不同的实体进行排序,则适用以下条件:
sortBy
const [sortBy,setSortBy] = useState({}); // set default as empty
您可以通过在const sortRows = (rows,property,sortedBy) => {
if (!sortBy[sortedBy] || sortBy[sortedBy] === 'asc') { // this is the default
rows.sort(function(a,b){
if (a[property] !== null && b[property] !== null) {
return a[property].localeCompare(b[property]);
}
});
} else if (sortBy[sortedBy] === 'desc'){
rows.sort(function(a,b){
if (a[property] !== null && b[property] !== null) {
return b[property].localeCompare(a[property]);
}
});
}
return rows;
};
中进行设置来更改这些属性的排序:
sortBy
,
感谢diogo.silva的回答和nbokmans的评论,我找到了解决方案。这是我如何相应地修改功能的方法。
const sortRows = (rows,sortedBy) => {
if (sortBy[sortedBy] === 'asc' || sortBy[sortedBy] === ''){
sortBy[sortedBy] = 'desc';
rows.sort(function(a,b){
if (a[property] !== null && b[property] !== null){
return a[property].localeCompare(b[property]);}
});
} else if (sortBy[sortedBy] === 'desc'){
sortBy[sortedBy] = 'asc';
rows.sort(function(a,b){
if (a[property] !== null && b[property] !== null){
return b[property].localeCompare(a[property]);}
});
}
return rows
}
sortBy
状态的定义如下:
let [sortBy,setSortBy] = useState({
"sortFirstName": "","sortLastName": "","sortStatus": ""
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。