Javascript 如何在组件中自动传递更新的道具
我有一个场景,在我的ReactJS组件中,它安装在jQuery连接点上,如下所示 在下面的代码中,CustomfieldsDrawer是一个react组件,props是我作为props传递的对象$(“#app”)是安装React组件的连接点Javascript 如何在组件中自动传递更新的道具,javascript,jquery,reactjs,Javascript,Jquery,Reactjs,我有一个场景,在我的ReactJS组件中,它安装在jQuery连接点上,如下所示 在下面的代码中,CustomfieldsDrawer是一个react组件,props是我作为props传递的对象$(“#app”)是安装React组件的连接点 ReactDOM.render(React.createElement(CustomfieldsDrawer, props), $('#app')); 现在props对象实际上是在一些客户事件上通过ajax调用得到更新的对象,我面临的问题是React组件不
ReactDOM.render(React.createElement(CustomfieldsDrawer, props), $('#app'));
现在props对象实际上是在一些客户事件上通过ajax调用得到更新的对象,我面临的问题是React组件不知道何时更改了props,并且它不会自动重新渲染自己。每当道具实际发生变化时,我不得不再次调用上述代码行。你们知道有什么方法可以方便我的React组件的自动更新吗?React组件将在我们为它设置状态时自动更新,所以在ajax回调中,我们可以在这里设置状态,或者我认为您可以为您的
CustomfieldsDrawer
组件使用componentWillReceiveProps()
:
componentWillReceiveProps(nextProps) {
this.setState({
//set you new state here, then in the render method, you should render using this state, instead of props
someState: nextProps.yourNewProp,
});
}
render() {
// Use "{this.state.someState}" instead of "{this.props.yourProp}"
return (
<div>{this.state.someState}</div>
);
}
组件将接收道具(下一步){
这是我的国家({
//在此处设置新状态,然后在render方法中,应使用此状态而不是道具进行渲染
someState:nextrops.yourNewProp,
});
}
render(){
//使用“{this.state.someState}”而不是“{this.props.yourProp}”
返回(
{this.state.someState}
);
}
如果这还不起作用,请在这里发布您的ajax函数,或更多代码,以便我能够了解更多关于您的案例,然后我们可以一起修复它,感谢React组件将在我们
设置状态时自我更新,因此无论是在ajax回调中,我们都可以在这里设置状态,或者我认为您可以使用component willreceiveprops()
作为CustomfieldsDrawer
组件:
componentWillReceiveProps(nextProps) {
this.setState({
//set you new state here, then in the render method, you should render using this state, instead of props
someState: nextProps.yourNewProp,
});
}
render() {
// Use "{this.state.someState}" instead of "{this.props.yourProp}"
return (
<div>{this.state.someState}</div>
);
}
组件将接收道具(下一步){
这是我的国家({
//在此处设置新状态,然后在render方法中,应使用此状态而不是道具进行渲染
someState:nextrops.yourNewProp,
});
}
render(){
//使用“{this.state.someState}”而不是“{this.props.yourProp}”
返回(
{this.state.someState}
);
}
如果这还不起作用,请在这里发布您的ajax函数或更多代码,以便我能够了解更多关于您的案例,然后我们可以一起修复它,谢谢,因为props
是在React
之外修改的普通javascript对象,React不知道它已更改,除非您明确告诉它,在本例中,通过重新渲染组件
因此,您可以将代码包装到某个父组件中,并从中调用ajax,然后更改其状态以包含新数据,这些数据将传递给子组件并触发自动重新渲染
或,如果坚持让代码在React之外,则必须手动重新渲染。不过,您可以为此创建一些方便的管理代码,如需灵感,请查看官方React网站上的博客文章
另一方面,我不确定你发布的代码是如何工作的ReactDOM.render
函数要求第二个参数是DOM对象,但$(“#app”)
返回jQuery对象。你的意思是让$(“#app”)[0]
改为吗?因为props
是一个普通的javascript对象,在React
之外进行了修改,所以React不知道它被更改了,除非你明确地告诉它,在这种情况下,通过重新呈现组件
因此,您可以将代码包装到某个父组件中,并从中调用ajax,然后更改其状态以包含新数据,这些数据将传递给子组件并触发自动重新渲染
或,如果坚持让代码在React之外,则必须手动重新渲染。不过,您可以为此创建一些方便的管理代码,如需灵感,请查看官方React网站上的博客文章
另一方面,我不确定你发布的代码是如何工作的ReactDOM.render
函数要求第二个参数是DOM对象,但$(“#app”)
返回jQuery对象。你的意思是让$(“#app”)[0]
改为在那里吗?只需使用state而不是props只需使用state而不是propsWell在其他某个react组件上点击它就可以了,谢谢你点击它。在其他react组件上点击它就可以了,谢谢你点击它。