【发布时间】:2021-05-27 08:41:15
【问题描述】:
您好,我想知道为什么这段代码有效, 抱歉,sintax 错误,这是一个示例。我的问题是为什么 memberIpAssignments 正在获取 ip 价值?如果我没有将 ip 传递到 setMemberIpAssignments(arr =>[...arr]) 中,我不会得到它,但仍然会采用该值并更新状态。
setMemberIpAssignments(arr =>[...arr]),这个状态根本不应该改变,因为我没有给 ip 值。但它确实改变了 ip 值。 如果有人可以向我解释,我将不胜感激。 我是 react-native 的新手
export const zeroTierNetworkMembersUpdateScreen = ({ route }) => {
const { ipAssignments } = ["192.168.0.1","192.168.1.1"];
const [memberIpAssignments, setMemberIpAssignments] =(ipAssignments);
return (
<View style={styles.viewSet}>
{memberIpAssignments.map((eachIpAssignments, index) => {
return (
<Input
key={index}
placeholder={"ipAssignments"}
keyboardType={"default"}
value={eachIpAssignments}
onChangeText={(value) => {
var ip = ipAssignments;
ip[index] = value;
setMemberIpAssignments(arr =>[...arr]);
}}
/>
);
})}
</View>
);
};
【问题讨论】:
-
您的语法不正确。您正在对数组使用对象解构。这将在 ipAssignments 变量上返回 undefined。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
-
除了语法错误,您正在使用功能状态更新。它是一个传递先前状态供您使用的函数。
setMemberIpAssignments(arr =>[...arr])只是将先前的状态数组传播到一个新的数组引用中并返回它。除了触发重新渲染之外,它没有做任何事情。 -
对不起sintax错误,这是一个例子,真正的代码是一个数组。我的观点是为什么“memberIpAssignments”取“ip”值?如果我没有将“ip”传递给“setMemberIpAssignments”,但我仍然接受它的值并更新状态,我就不明白了。
-
如果我不得不说,它是对象突变。您使用
ipAssignments初始化您的状态,并且您直接在onChangeText处理程序中改变该ipAssignments对象。setMemberIpAssignments(arr =>[...arr]);只是重新分配数组引用并触发重新渲染,从而暴露了无意突变的副作用,您会看到更新的数据。
标签: javascript android reactjs react-native expo