Не удается установить значение по умолчанию useState для входящих данных redux

#javascript #reactjs #redux

Вопрос:

Мне нужно установить состояние со значением по умолчанию из редуктора redux. Я могу утешить.запишите значение просто отлично, я предполагаю, что оно недостаточно «быстрое»?

Я попытался установить переменную в значение редуктора, которое мне нужно, а затем вызвать useState с переменной, но это тоже не сработало…

 const ChatProvider = ({ children }) =gt; {    const conversations = useSelector((state) =gt; state.conversations) // all conversations     const [activeConversationId, setActiveConversationId] = useState(conversations[1]?.conversationSid)  console.log(conversations[1]?.conversationSid) // I get my string "Ox990"  console.log(activeConversationId) // I get undefined...  // render stuff here  }  

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

1. Сколько раз вы видите свои console.log утверждения (например, выполняется ChatProvider повторная визуализация)? И как работают редукторы, которые отвечают за настройку state.conversations ?

2. useState это беспорядок; он не является строго чистым (он имеет побочный эффект сохранения значения при первом вызове), в то время как все другие крючки (например useSelectors ) предполагают, что компонент является чистым, и, следовательно, могут возвращать значения, которые не предназначены для обработки побочным эффектом кода. Что вы могли бы сделать useEffect(() =gt; setActiveConversationId(....)) , так это то, что будет вызываться только при правильном закрытии. Но это, вероятно, неудовлетворительно.

3. Я бы попытался поместить первый идентификатор разговора в a const firstConversationId = useMemo(() =gt; conversations[1]?.conversationSid, [conversations]); , чтобы зафиксировать значение. Затем используйте firstConversationId для инициализации состояния activeConversationId .