#reactjs
Вопрос:
Мне любопытно, почему React не определяет компоненты, как показано ниже. Он должен быть вызван компонентом и его возвращенным значением в первый раз, и для повторного отображения единственное, что нужно сделать, это вызвать возвращенное значение, которое также является функцией. Функции, которые не нуждаются в реквизитах, будут определены во внешней области функций, а те, которые нуждаются, будут определены во внутренней области функций.
function Component(){ const [count, setCount] = useState(0) //other states const incerement = () =gt;{ setState((oldState) =gt; oldState 1) } // define other functions that do not need props but does state here return (props) =gt; { //define the functions that need props here return ( lt;divgt;{count}lt;/divgt; lt;button onClick={increment}gt;Incrementlt;/buttongt; ) } }
Комментарии:
1. useState не будет выполняться при повторном вызове.
2. Почему это необходимо выполнить
useState
при повторном рендеринге?3. Он возвращает текущее значение состояния, а не только устанавливает его при первом рендеринге. Без этого, как бы перепродавец узнал ценность?
4. Что делать, если вам нужен реквизит для управления состоянием?
5. Но в чем было бы преимущество вашего пути?
Ответ №1:
Хороший вопрос.
Наиболее очевидным недостатком здесь является отсутствие последующих вызовов useState. Вызов его не только устанавливает значение по умолчанию при первом вызове, но и извлекает текущее значение при каждом следующем вызове.
В вашем текущем предложении предполагается, что внутренняя область каким-то образом должна получить текущее значение состояния, но, похоже, нет способа, как это было бы возможно.
В любом случае, кажется неясным, что улучшит ваше предложение. Это все еще функция, которая реагирует на вызовы. Однако недостаток вашего подхода очевиден: при первом вызове React должен был бы вызвать функцию верхнего уровня, а затем внутреннюю функцию, а затем вызывать только внутреннюю функцию при последующих вызовах. Это означало бы, что React должен был бы обрабатывать первый вызов иначе, чем последующие вызовы.
Однако в настоящее время React вызывает компоненты одним и тем же способом, независимо от различия между первым и всеми остальными вызовами.
Комментарии:
1. Я думал, что это позволит избежать создания функций, которые не нуждаются в реквизитах, и функций setState, которые возвращаются при каждом вызове.
2. @Музаффер: это был твой хороший вопрос. Возможно, вы упустили тот факт, что useState необходимо вызывать при каждом рендеринге, но часто разумные оптимизации могут быть реализованы путем рефакторинга существующего кода. Кроме того, другие, возможно, могли бы чему-то научиться из этого вопроса и обсуждения.
3. Кстати, я не согласен с этим: «Однако в настоящее время React вызывает компоненты одинаково, независимо от различия между первым и всеми остальными вызовами». Если это так, то состояние будет начальным значением при каждом вызове. Потому что мы передаем начальное значение в состояние использования, которое в данном случае равно 0.
4. @Музаффер: не совсем так. React сохраняет состояние извне, за пределами компонента, и он знает, является ли это первым вызовом (который задает начальное значение) или последующим вызовом (который просто возвращает значение). Прелесть этого звонка в том, что он выглядит одинаково в обоих случаях.