как связать в реакции функциональную составляющую?.bind (это) не работает - PullRequest
0 голосов
/ 21 декабря 2018

Это не связано в setTimeout, где я вызываю функцию setState, почему это происходит?

Я добавил codepen ниже, я попробовал тот же код в js, и он работает

<html>
<head>
    <title></title>
    <meta charset="UTF-8" />
</head>
  <body>
    <div id="root"></div>
    <script src="https://unpkg.com/react@16.3.1/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@16.3.1/umd/react-dom.development.js"></script>
    <script src="https://unpkg.com/babel-standalone@6.26.0/babel.js"></script>

    <script type="text/babel">
      const state = { 
        eventCount: 0,
      }

      function setState(newState) {
        Object.assign(state, newState);
        render();
      }

      setTimeout(
        function() {
          this.setState({eventCount: 666});
        }
        .bind(this),
        1000
      );



      function App() {
        return (
          <div>
            <p>
              There have been {state.eventCount} events.
            </p>
          </div>
        )
      }


      function render() {
        ReactDOM.render(<App/>, document.getElementById('root'));
      }
      render();


    </script>
  </body>
</html>

https://codepen.io/anon/pen/gZgQWX?editors=1011 (реакция) https://codepen.io/anon/pen/oJZerP?editors=1111 (пример JS)

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Функциональные компоненты не имеют состояние (по крайней мере, до появления функции предстоящих перехватов).Не существует метода setState для вызова.В текущей реакции, если вы хотите использовать состояние, вам нужно использовать компонент класса, а не функциональный компонент.

0 голосов
/ 21 декабря 2018

Теперь вы привязываете свою функцию к контексту окна.Поместите setTimeout в функцию приложения, чтобы «this» было привязано к экземпляру приложения.

...