#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. Функция получит предыдущее значение и вернет обновленное значение.