Javascript 从按钮单击事件渲染React组件

Javascript 从按钮单击事件渲染React组件,javascript,reactjs,asynchronous,Javascript,Reactjs,Asynchronous,我正在开发一个小的react应用程序,它由一个图表组件和一些其他组件组成。图表组件是一个单独的文件/组件/子组件。当我单击主容器中的按钮时,它调用承诺(使用axio),并返回一些数据作为响应。此响应数据被设置为状态,该状态作为道具传递给图表组件。但图表不会加载。这是因为图表已经加载,因为初始状态为空,图表也为空。是否只有在promise返回数据后才能呈现图表组件 这是我的密码 按钮单击事件 ClickMe = () =>{ axios.get('http://xyz

我正在开发一个小的react应用程序,它由一个图表组件和一些其他组件组成。图表组件是一个单独的文件/组件/子组件。当我单击主容器中的按钮时,它调用承诺(使用axio),并返回一些数据作为响应。此响应数据被设置为状态,该状态作为道具传递给图表组件。但图表不会加载。这是因为图表已经加载,因为初始状态为空,图表也为空。是否只有在promise返回数据后才能呈现图表组件

这是我的密码

按钮单击事件

  ClickMe = () =>{

         axios.get('http://xyzsdsd.com/abc')
            .then((response)=>{

               this.setState({
                 tags:response.data
               });

               console.log(this.state.tags);

            }).catch((err)=>{

              console.log(err);
            });


  }
渲染函数

  render(){
        return(
        <div>
         <otherComponents/>
         <chart data={this.state.tags}/>
        </div>

         );
}
render(){
返回(
);
}

在渲染中添加一个条件,仅在state.tags对象有效时渲染图表组件。在初始渲染时,图表将不会被渲染。当AJAX调用返回并调用setState()时,将使用非null state.tags再次调用render(),从而呈现图表

render(){
  let chart;

  if (this.state.tags) {
    chart = <chart data={this.state.tags}/>;
  }

  return (
    <div>
      <otherComponents/>
      {chart}
    </div>
  );
}
render(){
让图表;
if(this.state.tags){
图表=;
}
返回(
{chart}
);
}

在渲染中添加一个条件,仅在state.tags对象有效时渲染图表组件。在初始渲染时,图表将不会被渲染。当AJAX调用返回并调用setState()时,将使用非null state.tags再次调用render(),从而呈现图表

render(){
  let chart;

  if (this.state.tags) {
    chart = <chart data={this.state.tags}/>;
  }

  return (
    <div>
      <otherComponents/>
      {chart}
    </div>
  );
}
render(){
让图表;
if(this.state.tags){
图表=;
}
返回(
{chart}
);
}

对于良好的用户体验,您可能需要考虑组件或UI部分可能遇到的不同状态和流程

从头顶上看,我有三种状态<代码>空板岩,
加载
(因为您接触服务器也可能需要一些时间)和
带数据的图表

因此,根据不同的状态,您可能希望显示不同的组件

我会通过构造函数在ES6中为设置InitialState,或者在getInitialState函数中不设置ES6

如果您想启动ajax
onLoad
组件
axios.get
,您应该考虑放置
组件didmount
。 这也适用于React路由器。因此,每当您导航到ChartComponent时,它就会在挂载时加载

如果您碰巧认识到渲染函数中的If语句变得复杂,因为您的业务逻辑需要更多。您肯定应该检查Redux(与React的结合),以便更好地控制状态和数据流

真正伟大的内部结构如何与redux反应应用程序可以在这个自由找到视频系列。


希望这能有所帮助。

对于良好的用户体验,您可能需要考虑组件或UI部分可能遇到的不同状态和流程

因此,从头顶上看,我将有3种状态。
空板岩
加载
(因为您接触服务器也可能需要一些时间)和
图表数据

因此,根据不同的状态,您可能希望显示不同的组件

我会通过构造函数在ES6中为设置InitialState,或者在getInitialState函数中不设置ES6

如果您想启动ajax
onLoad
组件
axios.get
,您应该考虑放置
组件didmount
。 这也可以与React路由器一起工作。因此,每当您导航到ChartComponent时,它会在安装时加载

如果您碰巧意识到渲染函数中的If语句变得复杂,因为您的业务逻辑需要更多。您肯定应该检查Redux(与React的组合),以便更好地控制状态和数据流

真正伟大的内部结构如何与redux反应应用程序可以在这个自由找到视频系列。


希望这能有所帮助。

或者在构造函数中为图表设置初始数据,或者在构造函数中为图表设置初始数据,或者如果您继续以这种方式使用React,您将遇到无数的麻烦。您应该研究和流行的实现/调整。许多人认为React是一个功能齐全的框架,如Angular–不是。React是一个小型库,用于处理前端应用程序的特定部分。React让您可以自由选择其他工具来完成其他任务,如获取数据、维护大型应用程序状态、路由等。如果您继续以这种方式使用React,您将遇到无数麻烦。您应该仔细研究React和流行的实现/改编。许多人认为React是一个功能齐全的框架,如Angular,但事实并非如此。React是一个小型库,用于处理前端应用程序的特定部分。React让您可以自由选择其他工具来完成其他任务,如获取数据、维护大型应用程序状态、路由等。除了使用flux或redux,我似乎没有其他选择。无论如何,谢谢。除了使用flux或redux,我似乎没有其他选择。无论如何,谢谢。