в моем приложении-макете (без серверной части), написанном с помощью Gatsby, у меня есть два компонента, отображающие элементы из одного и того же списка объектов. Мои объекты являются потоками разговоров, поэтому первый компонент отображает только заголовки потоков, а второй - длинный список всех сообщений во всех потоках. Я хотел бы иметь возможность выбрать поток в первом компоненте, так что второй отображает только те разговоры, которые принадлежат этому потоку. Итак, следуя шаблону, который я уже использовал в других частях моего кода, у меня теперь есть следующее:
redurs. js
...
const activeConversation = (state = {id : -1, name: "none"}, action) => {
switch (action.type) {
case SET_CONVERSATION:
//I have tried all possible variations I could think of the following
let newstate = action.payload.state;
state.id = newstate.id;
state.name = newstate.name;
//also tried to directly return action.payload.state and state
return newstate;
default:
return state
}
}
...
const rootReducer = combineReducers({activeConversation, /*more here*/})
export default rootReducer;
мое действие определяется как:
import {SET_CONVERSATION} from "./preferences";
export default function setConversation(state){
return {
type: SET_CONVERSATION,
payload: {
state
}
}
}
, и я отправляю следующее:
let [conversation, saveConversation] = React.useState("0");
const setConversation = (event) => {
saveConversation(event.currentTarget.id);
let selected = {
id: conversation,
name: toString(conversation)
}
props.dispatch(actionSetConversation(selected));
}
}
Я проверил, что диспетчерский вызов выполняется правильно, но доступ к сохраненному значению из второго компонента всегда возвращает Начальное значение. Есть идеи? Я использовал этот идентичный шаблон в других компонентах своего кода, так что я действительно очень запутался и у него нет идей.
Большое спасибо за помощь.