【发布时间】:2020-03-23 16:47:47
【问题描述】:
在我用 Gatsby 编写的模拟应用程序(无后端)中,我有两个组件显示来自同一对象列表的元素。我的对象是对话线程,因此第一个组件仅显示线程的标题,第二个组件是所有线程中所有消息的长列表。 我希望能够在第一个组件中选择一个线程,以便第二个仅显示属于该线程的对话。 因此,按照我已经在代码的其他部分中使用的模式,我现在拥有以下内容:
reducers.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));
}
}
我已验证调度调用正在正确执行,但从第二个组件访问存储的值总是返回初始值。 任何的想法?我一直在我的代码的其他组件上使用这种相同的模式,所以我真的很困惑并且没有想法。
非常感谢您的帮助。
【问题讨论】:
标签: reactjs redux state gatsby