Reactjs React native(vs.React)中的不变性和组件道具
这个问题有点与我有关 这听起来像是一个愚蠢的问题,已经被回答了一百万次,但我无法从我迄今为止读到的东西中找出什么是真的,什么不是。我在react或react本机文档中都找不到有关此主题的详细信息 那么,有人知道在react native中如何处理道具(在引擎盖下)吗?我问这个问题是因为我在几个地方读过:Reactjs React native(vs.React)中的不变性和组件道具,reactjs,react-native,immutability,Reactjs,React Native,Immutability,这个问题有点与我有关 这听起来像是一个愚蠢的问题,已经被回答了一百万次,但我无法从我迄今为止读到的东西中找出什么是真的,什么不是。我在react或react本机文档中都找不到有关此主题的详细信息 那么,有人知道在react native中如何处理道具(在引擎盖下)吗?我问这个问题是因为我在几个地方读过: 道具是不变的 组件本身是不可变的 道具/组件不是不可变的,但更改它们对渲染没有影响 我还认为react-native处理道具的方式与react完全相同(即react-native直接使用reac
让我们考虑这个简单的例子:
const style = {height: 10, width: 10, backgroundColor: "red"};
const firstItem = <View style={style} />;
firstItem.props.style = {...style, height: 100};
console.log(firstItem.props.style.height);
同样,如果secondItem
是不可变的,但它会打印200
,那么它应该打印10
。因此,组件在react native中不是不可变的
更改道具对渲染没有影响?
这次我不需要修改代码,我只需要渲染这两个项目,看看它们是高矩形还是小正方形。正如您可能已经猜到的,这会渲染两个高矩形,这意味着更改变异的组件/道具确实会对组件的渲染产生影响
export default class App extends React.PureComponent {
render() {
return (
<View style={{ margin: 20, padding: 20, flexDirection: "row" }}>
{firstItem}
{secondItem}
</View>
);
}
}
而不是(例如)改变组件:
child.props = {...child.props, doSomething: this.doSomething }
React.cloneElement(child, { doSomething: this.doSomething })
child.props = {...child.props, doSomething: this.doSomething }