Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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
ReactJS—在ajax函数呈现数据后执行javascript代码_Javascript_Ajax_Reactjs - Fatal编程技术网

ReactJS—在ajax函数呈现数据后执行javascript代码

ReactJS—在ajax函数呈现数据后执行javascript代码,javascript,ajax,reactjs,Javascript,Ajax,Reactjs,我应该将JavaScript代码放在哪里,以便在渲染完成后调用插件 <html> <head> <script src='https://cdnjs.cloudflare.com/ajax/libs/es6-promise/3.2.2/es6-promise.min.js'></script> <script src='https://cdnjs.cloudflare.com/ajax/libs/react/15.2.1/react

我应该将JavaScript代码放在哪里,以便在渲染完成后调用插件

<html>

<head>
  <script src='https://cdnjs.cloudflare.com/ajax/libs/es6-promise/3.2.2/es6-promise.min.js'></script>
  <script src='https://cdnjs.cloudflare.com/ajax/libs/react/15.2.1/react.min.js'></script>
  <script src='https://cdnjs.cloudflare.com/ajax/libs/react/15.2.1/react-dom.min.js'></script>
  <script src='https://cdnjs.cloudflare.com/ajax/libs/axios/0.13.1/axios.min.js'></script>
  <script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
</head>

<body>


  <div id="root"></div>


  <script type="text/babel">

    const REST_API = 'users.json';

// The root component
const App = props => (
  <div className="app">
      <UserListContainer />
   </div>
);

// Container
class UserListContainer extends React.Component {

  constructor(props) {
    super(props);
    this.state = {
      users: [{
        name: 'Loading data...'
      }]
    };
  }

  loadData() {
    axios.get(REST_API).then((response) => {
      //console.log(response.data);
      this.setState({
        users: response.data
      })
    });
  }

  // Life cycles hooks
  // facebook.github.io/react/docs/component-specs.html
  componentWillMount() {};
  componentDidMount() {
    // Data is loaded async, therefore will be inserted after first DOM rendering
    this.loadData();
  };
  componentWillReceiveProps(nextProps) {};
  shouldComponentUpdate(nextProps, nextState) {
    return true;
  };
  componentWillUpdate(nextProps, nextState) {};
  componentDidUpdate(prevProps, prevState) {};
  componentWillUnmount() {};

  render() {
    return (<UserList users={this.state.users} />);
  };
}

// Presentation
const UserItem = (user, index) => (
  <li key={index}>
          <div className="header"> 
            <div className="name"> {user.name}</div>

            <div className="index">{(index+1)}</div>
          </div>

            <div className="date">
            <i className="fa fa-date" aria-hidden="true"></i>
            <span>{user.date}</span>
          </div>



          <div className="contact">
            <i className="fa fa-phone" aria-hidden="true"></i>
            <span>{user.phone}</span>
          </div>
      </li>
);
const UserList = props => (
  <div className="user-list">
    <h1>React ES6 Ajax, Container and Presentation - example</h1>
    <ul>
        {props.users.map(UserItem)}
     </ul>
   </div>
);

// Render
ReactDOM.render(
  <App />, document.getElementById('root')
);

    </script>



</body>

</html>
然后,在第一个元素之后,警报功能开始工作

这些是我的真实档案-


如果我正确理解您的需求,那么
componentdiddupdate()
钩子将是访问DOM(并调用您的插件)的正确钩子。这将在渲染组件后调用

至于
组件diddupdate()

当组件被更新时,利用这个机会在DOM上进行操作。只要您将当前道具与以前的道具进行比较(例如,如果道具没有更改,则可能不需要网络请求),这也是进行网络请求的好地方

需要注意的一点是,
componentdiddupdate()
hook不会在第一次渲染时触发

更新

为了解决这个“第一次渲染”问题,您可以使用可选的回调函数,该函数可以传递给
setState(state,callback)
。此
回调
在呈现组件(状态更改后)后触发

在您的情况下,您可以这样做:

loadData() {
    axios.get(REST_API).then((response) => {
      //console.log(response.data);
      this.setState({ users: response.data }, () => {

           // When this callback is invoked, the component has been 
           // rendered and the DOM can be safely accessed
      })
    });
  }

componentDidMount
是获取数据的正确位置,而且您的操作方式正确<如果您需要接收道具或状态并进行相应更新,则可以使用代码>组件diddupdate挂钩。如果您的子组件将通过接收数据从父组件更新它们,则这是必需的。但在查看了您的代码之后,我没有注意到您需要父组件。因此,您不需要
componentdiddupdate
hook。你只需要做如下的事情

保持这样的状态:

this.state = {
  users: [],
  loading: true,
  loadingText: 'Loading data...'
};
然后,在将数据集加载获取为false后:

loadData() {
    axios.get(REST_API).then((response) => {
      //console.log(response.data);
      this.setState({
        users: response.data,
        loading: false
      })
    });
  }
现在,在渲染它们时:

const UserList = props => (
  <div className="user-list">
    <h1>React ES6 Ajax, Container and Presentation - example</h1>
    <ul>
        {!props.loading && props.users && props.users.map(UserItem)}
     </ul>
   </div>
);
constuserlist=props=>(
React ES6 Ajax、容器和表示-示例
    {!props.loading&&props.users&&props.users.map(UserItem)}
);

注意:您还必须通过加载状态。

我已经更新了问题,请检查,是否有任何方法在之后运行它,所有元素都已渲染在第一个元素渲染后激发,我希望激发它,在所有元素呈现之后。@arunpasades我刚刚更新了答案-这对你有帮助吗?还是一样。你的确切问题是什么?@这是我的实际文件,我只需要在呈现所有元素之后将插件附加到呈现的项上-插件不包括在内,我需要知道初始化插件的确切位置,渲染完成后,如何包括组件?我正在学习一个新的教程。
const UserList = props => (
  <div className="user-list">
    <h1>React ES6 Ajax, Container and Presentation - example</h1>
    <ul>
        {!props.loading && props.users && props.users.map(UserItem)}
     </ul>
   </div>
);