Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在组件中自动传递更新的道具_Javascript_Jquery_Reactjs - Fatal编程技术网

Javascript 如何在组件中自动传递更新的道具

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组件不

我有一个场景,在我的ReactJS组件中,它安装在jQuery连接点上,如下所示

在下面的代码中,CustomfieldsDrawer是一个react组件,props是我作为props传递的对象$(“#app”)是安装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组件上点击它就可以了,谢谢你点击它。