#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
.