Можем ли мы использовать деструктуризацию объекта для useState () в перехватчиках реагирования? - PullRequest
0 голосов
/ 29 октября 2018

Начиная с документации от Hooks in Reactjs,

const [count, setCount] = useState(0);

они используют деструктуризацию массива. Можем ли мы использовать деструктуризацию объекта вместо деструктурирования массива?

Ответы [ 3 ]

0 голосов
/ 29 октября 2018

Я полностью согласен с ответом @Patrick. Поскольку реагирующая команда реализовала его, придерживайтесь всех вариантов использования. На самом деле нет необходимости помещать возвращаемые значения в объект, так как он не нуждается в доступе к нему через ключи или позже должен обновляться. Один край здесь - Разрушение детали для массивов намного проще, чем для объектов.

Как мы видели const [count, setCount] = useState(0);, мы можем использовать любое имя для count и setCount. В объектах нам нужно сделать это так:

// grab the state value and setState func but rename them to count and setCount
   const { stateValue: count, setState: setCount } = useState(0);

в массивах:

// grab in order and rename at the same time
   const [count, setCount] = useState(0);
0 голосов
/ 17 июня 2019

Вы не должны за useState, но ...

Как упомянул @SakhiMansoor, именование переменных становится проще при деструктурировании массива в случае setState, потому что это универсальный хук, и вы можете использовать его для разных данных, например:

const [count, setCount] = useState(0);
const [age, setAge] = useState(0);
...

Но при создании пользовательских хуков я обычно предпочитаю объекты. Давайте рассмотрим пример:

// If return an array
const [items, addItem, removeItem] = useItems();

// and only need `removeItem`, I write (I could easily forget one `,` here):
const [, , removeItem] = useItems();

// if I returned object, I would:
const { removeItem } = useItems();

При написании пользовательских, специфических хуков мне обычно не нужно переименовывать ключи, поэтому в этом случае объект работает лучше.

0 голосов
/ 29 октября 2018

useState возвращает массив, поэтому нет, в этом случае вам придется использовать деструктуризацию массива.

Для пояснения, это не означает, что все функции ловушки React должны возвращать массив.

Если вы создаете свой собственный хук , вы можете заставить его возвращать все, что угодно, включая объект, который вы можете разрушить.

...