Что, если я добавлю несколько зависимостей во второй параметр React useEffect?

Например, если я сделаю крючок useEffect как useEffect(() => {...},[a,b]). Будет ли useEffect уволен, если изменится один из [a,b] или когда изменятся оба [a,b]?

понятия не имею, поэтому я подал github.com/facebook/реагировать/вопросы/15068, что я настоятельно рекомендую вам сделать в будущем. Если официальная документация не охватывает вопрос, вы почти гарантированно не будете единственным человеком, который задается вопросом о том, что вас интересует, и спрашивать людей, которые делают то, что вы используете для улучшения документации, очень полезно для них. каждый.

Mike 'Pomax' Kamermans 08.03.2019 17:46

Или, если есть возможность, просто протестируйте сами :)

Pavel Ye 09.03.2019 00:19

Но когда мы его протестируем, он может дать ответ, но вы не можете протестировать все пограничные случаи и быть уверенным в этом. Почему бы просто не добавить строку в документацию, чтобы развеять все сомнения.

rockfight 09.03.2019 13:36
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
44
3
30 856
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Он будет срабатывать при изменении любого из них. Можно подумать, что вы говорите React:

a and b are the things that I am using inside this effect, so if either of them change, my effect will need to cleanup the old version and re-execute with the updated values.

Вот простой пример, который позволяет увидеть поведение:

import React, { useState, useEffect } from "react";
import ReactDOM from "react-dom";

function App() {
  const [dependency1, setDependency1] = useState(1);
  const [dependency2, setDependency2] = useState(1);
  useEffect(
    () => {
      console.info("only dependency1", dependency1, dependency2);
    },
    [dependency1]
  );
  useEffect(
    () => {
      console.info("dependency1 and dependency2", dependency1, dependency2);
    },
    [dependency1, dependency2]
  );
  return (
    <div className = "App">
      <button
        onClick = {() => {
          setDependency1(prev => prev + 1);
        }}
      >
        Change dependency1
      </button>
      <button
        onClick = {() => {
          setDependency2(prev => prev + 1);
        }}
      >
        Change dependency2
      </button>
      <button
        onClick = {() => {
          setDependency1(prev => prev + 1);
          setDependency2(prev => prev + 1);
        }}
      >
        Change both
      </button>
    </div>
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

Edit useEffect dependencies

Похоже, он срабатывает, когда один из них меняется. Но почему в документации ничего не сказано об этом? Может быть, в будущем они прояснят это. Тем не менее спасибо за четкий ответ.

rockfight 09.03.2019 13:34

Команде React (которая живет и дышит этим материалом) нелегко предсказать, что будет и что не будет очевидным для людей. В документации объясняется назначение массива (из которого можно сделать вывод о том, каким должно быть поведение). Подробное описание всех пограничных случаев может затруднить поиск ключевых понятий и сделать вещи более сложными, чем они есть на самом деле. Если вы считаете, что документацию следует улучшить, отправьте пул реквест с изменениями, которые помогли бы вам это понять.

Ryan Cogswell 09.03.2019 14:20

Другие вопросы по теме