Reactjs 反应助攻阵法无效,哪一个是最好的?

Reactjs 反应助攻阵法无效,哪一个是最好的?,reactjs,react-hooks,Reactjs,React Hooks,现在,在React中,我想更新一个数组。哪种选择最好 我有以下几点: const [users, setUsers] = useState(['1','2','3']); 现在,我想过滤掉3,数组中只有1和2 users.filter(item => item.name !== 3) 哪个选项最好: const [users, setUsers] = useState(['1','2','3']); 选项1,将数组复制到新变量: const tempUsers = {... user

现在,在React中,我想更新一个数组。哪种选择最好

我有以下几点:

const [users, setUsers] = useState(['1','2','3']);
现在,我想过滤掉3,数组中只有1和2

users.filter(item => item.name !== 3)
哪个选项最好:

const [users, setUsers] = useState(['1','2','3']);
选项1,将数组复制到新变量:

const tempUsers = {... users.filter(item => item.name !== 3)}
setUsers(tempArray);
备选案文2:

setUsers(users.filter(item => item.name !== 3))
哪一个更好,为什么我们选择一个而不是另一个?

选项2

setUsers(users.filter(item => item.name !== 3))
那就足够了


这是因为
Array.filter()
不会直接改变状态,因为它会创建一个新数组。因此,在将结果设置为状态之前,无需采取额外的步骤将结果传播到新数组中。

正如Martin fowler在《重构》一书中所说,这是一个代码气味的问题


第二个选项更好,因为它更容易读取,并且不需要额外的temp变量

array::filter返回一个新的数组引用,所以我自然会选择这个。此外,您的第一个选项将把新数组扩展到一个对象中,它可能仍然可以编译和工作,这只是一种非常奇怪的方式。