我正在编写我的第一个react native应用程序。在这个应用程序中,一个聊天机器人,对话框使用int(比如intToFollow)递增,跟踪显示了多少短语,每个短语在特定动作(通常是ACTION1,有时是ACTION2)发送后显示。在那之前一切都很好。
现在,当我试图实现另一个动作做别的事情,但需要操作说intToFollow,它告诉我,我的int是未定义或NaN,我很失落,因为对我来说,我的新减速器看起来完全像我的另一个谁仍然工作完美。我的问题是:同一个状态可以被多个减速机依次操纵吗?我是不是错过了什么重要的东西?
编辑说明:dialogFr和Eng是包含对象的数组,因此后面有时会提到属性(如.steps),并且根据用户选择的语言有选择地使用它们。intToFollow的主要作用是作为每个数组的索引,并在每次按下某个按钮时更改为下一个对象,或者在使用.steps的值递增后更改为它所触及的任何对象。这是没有问题的部分。ACTION2是为了做同样的事情与小的变化,增量的intToFollow是固定的(这里1),我不能只是使用ACTION1,因为其他原因!//编辑结束
import { createStore } from "redux";
import { dialogFr } from "../ressources/dialogsFrance";
import { dialogEng } from "../ressources/dialogsEng";
const initialState = {
isEnglish: true,
intToFollow: 0,
currentDialog: "a",
condition: false,
}
function reducer(state = initialState, action) {
let nextState
switch (action.type) {
case 'ACTION_1':
const intToFollow = state.intToFollow;
nextState = {
...state,
intToFollow: intToFollow + dialogFr[intToFollow].steps,
currentDialog: state.isEnglish ? dialogEng[intToFollow] : dialogFr[intToFollow],
}
return nextState || state
case 'ACTION_2':
const condition = state.condition;
if (condition === true) {
nextState = {
...state,
intToFollow: intToFollow + 1,
currentDialog: state.isEnglish ? dialogEng[intToFollow] : dialogFr[intToFollow],
}
return nextState || state
}
default:
return state
}
}
const store = createStore(reducer, initialState)
export default store
我的问题是对话[intToFollow]和dialogFr[intToFollow]在ACTION2中被认为是未定义的,但在ACTION1
中工作良好使用console.log,我发现intToFollow将第二个reducer作为NaN输入,从而呈现对话框数组Undefined。然而,这个商店是定义和操作inToFollow的唯一地方,所以我花了几个小时看同样的10行代码……这就是我的全部!
动作时。类型=== ACTION_2,代码变成如下:
import { createStore } from "redux";
import { dialogFr } from "../ressources/dialogsFrance";
import { dialogEng } from "../ressources/dialogsEng";
const initialState = {
isEnglish: true,
intToFollow: 0,
currentDialog: "a",
condition: false,
}
function reducer(state = initialState, action) {
let nextState
switch (action.type) {
case 'ACTION_2':
const condition = state.condition;
if (condition === true) {
nextState = {
...state,
intToFollow: intToFollow + 1,
currentDialog: state.isEnglish ? dialogEng[intToFollow] : dialogFr[intToFollow],
}
return nextState || state
}
default:
return state
}
}
intToFollow
在哪里声明?
你只在ACTION_1中声明了它。
你应该:
- 在开关外声明
- 在ACTION_2中也声明
- 或更改行
intToFollow: intToFollow + 1,
和currentDialog: state.isEnglish ? dialogEng[intToFollow] : dialogFr[intToFollow]
分别为intToFollow: state.intToFollow + 1,
和currentDialog: state.isEnglish ? dialogEng[state.intToFollow] : dialogFr[state.intToFollow],
。