Какой способ использовать для замены всего объекта на useState ()? - PullRequest
0 голосов
/ 20 июня 2020

В моем приложении у меня есть массив объектов и состояние, в котором находится текущий выбранный объект. Объект неглубоко вложен и содержит только примитивные типы. Объект исходит из события щелчка. Если я выбираю новый объект, состояние текущего выбранного объекта должно быть изменено на новый объект. Данные от предыдущего выбранного объекта не нужны. Итак, каков наилучший способ (с точки зрения производительности, удобочитаемости и т.д. c.) Для изменения состояния.

const [currentSelectedObject, setCurrentSelectedObject] = useState();

setCurrentSelectedObject(newObject);

или

setCurrentSelectedObject({...currentSelectedObject, ...newObject});

или

setCurrentSelectedObject( currentSelectedObject => {...currentSelectedObject, ...newObject});

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

setCurrentSelectedObject(newObject) - лучший в этом случае.

Конструкция setCurrentSelectedObject({...currentSelectedObject, ...newObject}) выглядит опасно, потому что в этом случае currentSelectedObject является устаревшим с момента последнего рендеринга и состояниями между время последнего рендеринга и текущее будут потеряны.

0 голосов
/ 20 июня 2020

Если вы просто хотите установить currentSelectedObject для совершенно нового объекта:

setCurrentSelectedObject(newObject);

Если вы хотите добавить свойства newObject в существующие, ранее установленные currentSelectedObject вы должны использовать любой из двух других методов.

...