useEffect удаляет состояние, а затем сбрасывает? Реагировать

#reactjs #use-effect #react-select

#реагирует на #эффект использования #реагировать-выбрать

Вопрос:

У меня есть компонент, созданный с помощью React Select. Параметры, переданные в опцион параметров при выборе, зависят от состояния, которое пользователи ввели ранее. Каждый раз при отрисовке компонента выполняется проверка того, включает ли selectOptions уже элементы из массива состояний

 lt;Select  styles={err === '' ? inputStyles : inputStylesErr}  className="basic-single"  classNamePrefix="select"  isClearable={true}  isSearchable={true}  isMulti={true}  placeholder={`Select or search health zones in ${province}, ${state.address.country}`}  options={selectOptions}  defaultValue={selectOptions.some((option) =gt; option.value === state.healthZonesServed[0]) ? (  state.healthZonesServed.map((zone) =gt; {  return { ['label']: zone, ['value']: zone }  })  ) : ''}  onChange={(values) =gt; handleAddHealthZones(values.map((value) =gt; value.value))}  /gt;  
 const handleAddHealthZones = (value) =gt; {  setState({  ...state,  healthZonesServed: value  })  }   

Если пользователь заполнил свой массив healthZonesServed, а затем вернулся и изменил свою область (часть состояния, которая управляет вариантами выбора), а затем вернулся к этому компоненту, мне нужно, чтобы массив healthZonesServed был сброшен в []

Я делаю это с пользой. Я могу видеть в своей консоли.регистрируйте сбросы healthZonesServed в пустой массив при загрузке страницы, а затем каким-то образом повторно заполняйте его предыдущие значения откуда-то. У кого-нибудь есть какое-либо представление о том, почему это происходит, и о возможном решении?

 useEffect(() =gt; {  if (selectOptions.some((option) =gt; option.value === state.healthZonesServed[0])) {  return  } else {  setState({  ...state,  healthZonesServed: []  })  console.log('HIT')  }  }, [])  

Ответ №1:

Наиболее вероятная причина, по которой это не работает, заключается в том, что вы используете setState в функциональном компоненте. Попробуйте использовать хук useState для управления состоянием, в вашем случае установив для массива heathZoneServed значение пустой массив.

 const [healthZoneServed,sethealthZoneServed] = useState([]); sethealthZoneServed(value);  useEffect(() =gt; {  if (selectOptions.some((option) =gt; option.value === state.healthZonesServed[0])) {  return;  } else {  sethealthZonesServed([]);  console.log('HIT');  }  }, [healthZonesServed]);  

Надеюсь, это было полезно.

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

1. setState-это функция, вызываемая поставщиком useContext. Его функциональность заключается в том, что хук useState const { состояние, setState } = useContext(LocationContext);