reactjs - 函数组件总是在渲染中使用先前的状态
问题描述
我对使用钩子和功能组件很陌生。
我有一个过滤列表。当我尝试更新过滤器时,它将使用最后一个过滤器状态而不是新的过滤器状态。我一定错过了一些渲染/状态更改命令,但我似乎无法弄清楚它是什么。
我很感激我能得到的任何帮助:)
伪代码如下:
export default function TransferList(props) {
const [wholeList, setWholeList] = React.useState([]);
const [filteredList, setFilteredList] = React.useState([]);
const [filter, setFilter] = React.useState([]);
return (
<>
<TextField
value={filter}
onChange={(e) => {
// Set filter input
setFilter(e.target.value);
// Filter the list
let filtered = wholeList.filter(
(item) => item.indexOf(filter) !== -1
);
setFilteredList(filtered);
}}
/>
<List>
{filteredList.map((item) => (
<ListItem>Item: {item}</ListItem>
))}
</List>
</>
);
}
解决方案
在 onChange 内部,您应该使用将值保存在一个常量中,因为这是一个异步操作,filter
所以不会在之后更新。setFilter(filterValue)
<TextField
value={filter}
onChange={e => {
const filterValue = e.target.value;
// Set filter input
setFilter(filterValue);
// Filter the list
let filtered = wholeList.filter(item => item.indexOf(filterValue) !== -1);
setFilteredList(filtered);
}}
/>;
推荐阅读
- python-3.x - 有什么方法可以比较移动轨道上类似物体的方向角度吗?
- api - 如何将 Boondmanager ERP 的 PHP 中的 SOAP API 与 Talend 连接
- powerbi - 使用 Power BI 探索 Apache Kylin 多维数据集?
- pointers - 在方括号中添加两个寄存器是什么意思?
- javascript - Angular,动态获取组件引用,单击按钮
- python-3.x - 使用 Python 和 Google2Pandas 获取 Google Analytics API
- swift - 在 Swift 5 中正确执行 shell 命令
- azure - 在与主机相同的 Vnet 上运行 Jenkins Azure ACI Docker 代理
- tensorflow - 神经网络输出问题
- mysql - 在mysql中的两个数字之间创建虚拟行