Как использовать параметр функции внутри хука useEffect - PullRequest
0 голосов
/ 27 мая 2020

У меня есть прослушиватель событий щелчка, и я получаю в нем параметр данных. Внутри этой функции я устанавливаю состояние. Теперь я пытаюсь изменить состояние в зависимости от текущего состояния, и для этого мне нужно useEffect. Но я не знаю, как использовать внутри него параметр данных функции. Вот код:

import React from 'react';

const MyApp = () => {
   const [state, setState] = React.useState([]);
   const arr1 = [
      {id: 1, name: 'Daryl'},
      {id: 2, name: 'Negan'},
   ];

   const clickHandler = (data) => {
       const newData = arr1.filter(item => item.name === data.name); // some data i wan't to use in useEffect
       setState(newData);
   };

   React.useEffect(() => {
       if(state.indexOf(newData[0]) !== -1) { // how to use this here?
           //rest of the code
       }
   }, [state]);
}

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Так как вы будете sh добавлять или удалять элементы из обновленного состояния после фильтрации, вы можете сделать это до фактического обновления состояния, вам не нужен useEffect для фактического ожидания обновления состояния перед выполнением действия

const MyApp = () => {
   const [state, setState] = React.useState([]);
   const arr1 = [
      {id: 1, name: 'Daryl'},
      {id: 2, name: 'Negan'},
   ];

   const clickHandler = (data) => {
       const newData = arr1.filter(item => item.name === data.name); // some data i wan't to use in useEffect
       // What ever you want to do, you can operate on newData and then finally set updated data to state
       setState(newData);
   };

}
0 голосов
/ 27 мая 2020

вам не нужно использовать newData напрямую, потому что вы устанавливаете его значение в state

, просто измените свой компонент следующим образом:

import React from 'react';

const MyApp = () => {
   const [state, setState] = React.useState([]);
   const arr1 = [
      {id: 1, name: 'Daryl'},
      {id: 2, name: 'Negan'},
   ];

   const clickHandler = (data) => {
       const newData = arr1.filter(item => item.name === data.name); // some data i wan't to use in useEffect
       setState(newData);
   };

   React.useEffect(() => {
       if(state.length) { // if state array have length then its value are newData
           //rest of the code
       }
   }, [state]);
}
...