Разница между использованием функции со стрелкой и обычной функцией внутри useEffect в следующем коде

#javascript #reactjs #function #react-hooks #arrow-functions

Вопрос:

Я новичок в React js и впервые внедряю эффект использования в своем коде. Я следил за несколькими учебниками, и они сделали все по-другому, как показано ниже

Дело l:

 function App() {

  const[counter,setCounter] = useState(0);
  const[toggle,setToggle] = useState(false); 

  const incrementer = () =>{
    // counter =1
    setCounter(counter   1);    
    console.log(counter)
  };

  const toggler = () =>{
    setToggle((toggle) => !toggle);
  };
  
  return (
    <div className="App">
      <h1 className = {toggle ? 'active' : ''} >Hello world!!</h1>
      <h1>{counter}</h1>
      <h1>{abc}</h1>
      <button onClick={incrementer} >Click</button>
      <button onClick={toggler}>Toggle Here</button>     
      
      
      <div className="home">
        <h1>{Date.time}</h1>
        <Nav/> 
        <Tweets/>
      </div>    
    </div>
  );
}
 

Здесь, внутри функции инкремента, я просто использую счетчик 1, и это дает требуемый результат и имеет смысл. Это увеличивает количество на 1 при каждом щелчке.

Теперь случай 2:

 function App() {  

  const[counter,setCounter] = useState(0);
  const[toggle,setToggle] = useState(false);
  

  const incrementer = () =>{
    
    setCounter(() => counter 1);
    console.log(counter)
  };

  const toggler = () =>{
    setToggle((toggle) => !toggle);
  };
  
  return (
    <div className="App">
      <h1 className = {toggle ? 'active' : ''} >Hello world!!</h1>
      <h1>{counter}</h1>
      <h1>{abc}</h1>
      <button onClick={incrementer} >Click</button>
      <button onClick={toggler}>Toggle Here</button>    
          
      <div className="home">
        <h1>{Date.time}</h1>
        <Nav/> 
        <Tweets/>
      </div>    
    </div>
  );
}
 

В этом случае внутри функции приращения используется то, что кажется функцией со стрелкой. Я предполагаю, что он использует функцию внутри функции. Кроме того, он ничего не передает, так как () пуст. Как здесь увеличивается количество. Я в замешательстве.

Также внутри функции переключения я могу написать abc или любую переменную вместо переключения, и это работает. Как??

Обновить

Хорошо, моя главная путаница заключается в этом коде.

 const incrementer = () =>{
    // counter =1
    setCounter((kkk) => kkk   1);
    // setCounter(() => counter 1);
    console.log(counter)
  };
 

Эта функция также работает. Как это значение kkk получает значение счетчика=0. Разве мы не должны писать счетчик вместо kkk??

Комментарии:

1. » он использует то, что кажется функцией стрелки. «- да. Но ненужный — он всегда возвращает постоянное значение. » Я предполагаю, что он использует функцию внутри функции » — не уверен, что вы имеете в виду?

2. » Я могу написать abc или любую переменную вместо toggle, и это работает. Как? «- это параметр функции. Вы можете назвать его, вызывающему функцию все равно.

3. Для вашего первого ответа, не является ли setCounter одной функцией и () другой функцией без имени??

4. Да, setCounter это функция, () => counter 1 это функция, и таковы incrementer или App .

5. Функция, которая передается в качестве аргумента для вызова функции. Я бы не назвал это » функцией внутри функции » — я бы использовал эту фразу, чтобы сказать » incrementer определяется внутри App «.

Ответ №1:

Не только крючки react могут использовать функции со стрелками таким образом, но почти во всех случаях в Javascript. Может быть, мы могли бы найти объяснение в сравнении традиционных функций со стрелочными функциями

Комментарии:

1. Я добавил обновление @Chris. Не могли бы вы взглянуть на это??

2. Речь идет о функциональных обновлениях . Если новое состояние вычисляется с использованием предыдущего состояния, вы можете передать функцию в setState. Функция получит предыдущее значение и вернет обновленное значение.