Почему create-реакции-приложение инициализируется дважды? - PullRequest
1 голос
/ 01 апреля 2020

Я инициализировал приложение реакции, используя npx create-react-app:

import React from 'react';

class Expensive {
  constructor() {
    console.log('constructing expensive class');
  }
}

function App() {
  const expensiveRef = React.useRef(new Expensive());
  return (
    <div className="App">
      app
    </div>
  );
}

export default App;

Однако я вижу, что constructing expensive class выводится на консоль дважды. Почему это так?

Я получаю тот же результат, если заменить

const expensiveRef = React.useRef(new Expensive());

на

const [expensiveState, setExpensiveState] = React.useState(new Expensive());

1 Ответ

2 голосов
/ 01 апреля 2020

Каждый код выполняется на каждом рендере, поэтому он регистрируется несколько раз, даже useState запомнит первый экземпляр.

Если вы хотите, чтобы он был инициализирован только один раз, используйте эту версию useState, такую ​​как

const [expensiveState, setExpensiveState] = React.useState(() => new Expensive());

Таким образом, вы передаете функцию вместо инициализации объекта

см. https://reactjs.org/docs/hooks-reference.html#lazy -initial-state

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...