Мой компонент React, похоже, не перерисовывается

#reactjs #typescript #react-hooks

#реагирует на #машинописный текст #реагируют-крючки

Вопрос:

Я попытался реорганизовать некоторый код реакции и сохранить состояние дисплеев как объект, но теперь состояние, похоже, не обновляется. У меня есть

 let initialDisplay = {"javascript": true,"typescript": false} const [displays, setDisplays] = useState(initialDisplay);   const setDisplay = (name:language|tool, show:boolean) =gt; {  let newDisplays = displays;  newDisplays[name] = show;  setDisplays(newDisplays);  console.log(displays); }  

, img с

 onMouseOver={() =gt; setDisplay(name,true)} onMouseOut={() =gt; setDisplay(name, false)}  

, и

 lt;TechDropdown open={displays.javascript} tech={"javascript"}/gt; lt;TechDropdown open={displays.typescript} tech={"typescript"}/gt;  

^Эти компоненты возвращают это:

 lt;SlideDowngt;  {props.open ? dropDownContent : null} lt;/SlideDowngt;  

где выпадающее содержимое-это в основном просто имя и изображение

Это правильно утешает.регистрирует обновленный displays объект, но компонент TechDropdown не отображает изменения повторно. Есть какие-нибудь мысли?

(Моя теория: Я изменяю объект отображения вручную с помощью неглубокой копии, а затем, когда я вызываю setDisplays, изменений нет? Я не уверен, дайте мне знать.)

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

1. Если быть точным let newDisplays = displays; , это не поверхностная копия, это просто указание этой переменной на исходный объект. Стандартным способом неглубокого копирования было бы: let newDisplays = {...displays};

2. Можете ли вы опубликовать весь компонент целиком? Трудно сказать, как у вас все организовано, исходя из того, что вы опубликовали

3. @DBS Я попробовал синтаксис распространения, и он был очень ошибочным, по крайней мере, он мог измениться с ложного на истинное, но он будет отображаться медленно

4. @BrendanBond Я обновил пост — слайд-шоу-это библиотека реакций react-slidedown