我是反应 redux 的新手。我正在尝试使用 react 和 redux 创建一个基于 watson 的聊天机器人。我链接到 watson api 的 nodejs 后端工作正常。但是,我对如何在前端处理用户和机器人消息感到有些困惑?
在组件确实安装时,我将操作发送到我的后端,然后我从 Watson 获得响应并相应地更新状态。第一次,我只向后端发送一个空字符串。当用户按下带有他的消息的发送消息按钮时。动作再次被触发。我正在使用 redux thunk 进行异步操作。然后,当我从后端收到响应时,我使用“SEND_USER_MSG_TO_SOE”类型和有效负载发送了该操作。现在我必须将存储在状态 + 新输入文本中的先前响应发送到后端以获得新响应。
在我的减速器中,我正在做这样的事情 [...state, action.payload]。现在它也覆盖了先前响应的输入值。你能解释一下吗?
我需要数组中的输入和输出消息。这样我就可以使用地图并将其显示为列表。
另一件事,如果我不返回 [...state, action.payload] 并且只发送有效负载。然后我只得到一个回应就离开了。如何使用先前的响应输入和输出从中创建数组?
我附上回复图片。请指导我
谢谢见面
reducer:
export default (state = [], action) => {
console.log('reducer payload ---> ', action.payload);
switch(action.type) {
case 'SEND_USER_MSG_TO_SOE':
return [...state, action.payload]
default:
return state;
}
}
export default combineReducers({
watsonResponse: converReducer
})
action:
export const sendMessage = (userInput) => {
return async (dispatch, getState) => {
let response = null;
if (userInput === undefined) {
response = await axios.post('http://localhost:8014/message_in', userInput);
} else {
let newInput = [...getState().watsonResponse];
newInput[newInput.length - 1].input.text = userInput;
response = await axios.post('http://localhost:8014/message_in', newInput[newInput.length - 1]);
}
dispatch({
type: "SEND_USER_MSG_TO_SOE",
payload: response.data
});
}
}