Javascript Reactjs嵌套状态和子组件
我在具有许多嵌套数据和状态的大型应用程序中使用React/ImmutableJS。一些“嵌套”数据通过道具传递给子组件 子组件处理类似于局部变量的prop(由于prop是不可变的,所以没有变异):它们将一个新副本返回给父组件,父组件将更新自己的状态 一个简单的例子:Javascript Reactjs嵌套状态和子组件,javascript,reactjs,immutable.js,Javascript,Reactjs,Immutable.js,我在具有许多嵌套数据和状态的大型应用程序中使用React/ImmutableJS。一些“嵌套”数据通过道具传递给子组件 子组件处理类似于局部变量的prop(由于prop是不可变的,所以没有变异):它们将一个新副本返回给父组件,父组件将更新自己的状态 一个简单的例子: const user = Immutable.Map({ name: '...', accessRights: Immutable.Map({ preferences: true, c
const user = Immutable.Map({
name: '...',
accessRights: Immutable.Map({
preferences: true,
contact: false,
....
})
});
class Admin extends Component {
state = { user };
render() {
return <AccessRights
rights={user.get('accessRights')}
onRightsChange={newRights =>
this.setState({ user: user.set('accessRights', newRights) })
}
/>
}
}
class AccessRights extends Component {
render() {
const { rights, onRightsChange } = this.props;
return <div>
{rights.entrySeq().map(([key, value]) =>
<input
key={key}
type='checkbox'
checked={value}
onChange={e => onRightsChange(rights.set(key, e.target.checked))}
/>
)}
</div>
}
}
const user=Immutable.Map({
名称:“…”,
accessRights:Immutable.Map({
偏好:对,
联系人:false,
....
})
});
类管理扩展组件{
状态={user};
render(){
返回
this.setState({user:user.set('accessRights',newRights)})
}
/>
}
}
类访问权限扩展组件{
render(){
const{rights,onRightsChange}=this.props;
返回
{rights.entrySeq().map(([key,value])=>
onRightsChange(rights.set(key,e.target.checked))}
/>
)}
}
}
这有意义吗?是的。如果您需要额外的澄清或保证,只需查看React自己的文档即可:如果不需要从其他组件计算
AccessRights
组件的状态,那么我建议简化这样一个事实,即您每次都在渲染AccessRights
组件,而不可能需要这样做。您可以使用shouldComponentUpdate
对照“nextState
”(参数值通常用于引用shouldComponentUpdate
中传递的值)检查React
组件的值。对于更大的应用程序,建议使用flex体系结构以方便状态管理。如果您使用上述状态完整组件,您将丢失。是的。如果您需要额外的澄清或保证,只需查看React自己的文档即可:如果不需要从其他组件计算AccessRights
组件的状态,那么我建议简化这样一个事实,即您每次都在渲染AccessRights
组件,而不可能需要这样做。您可以使用shouldComponentUpdate
对照“nextState
”(参数值通常用于引用shouldComponentUpdate
中传递的值)检查React
组件的值。对于更大的应用程序,建议使用flex体系结构以方便状态管理。如果使用上面的状态完整组件,您将丢失。