【发布时间】:2023-03-27 04:59:01
【问题描述】:
我有一个更新状态的函数,并且我使用模拟函数来更新同样可以正常工作的函数,但是由于某种原因,这并没有更新状态...我对这个问题视而不见.. 这是来自 reducer 的调用(直到此时一切正常)
case 'UI_CONTROLL_SUCCESS':
{
if(action.answer.controllType)
state = changeUi(state, action.answer.questionId, action.answer.answerId, action.answer.controllValue, action.answer.controllType);
else
return state
}
它调用函数。这是它调用的函数:
function changeUi(project, questionId, answerId, newValue, whatUi)
{
console.log(newValue);
return project.map(item => {
if(item._id != questionId) {
return item;
} else {
return {...item, answers: item.answers.map(answer => {
if(answer._id != answerId) {
return answer
} else if(answer._id == answerId) {
if(whatUi == "setAnswerVisibility"){
return updateObject(answer, { visibility : newValue })}
else if (whatUi == "setAnswerDisabled"){
return updateObject(answer, { disabled: newValue })}
else if (whatUi == "SetAnswerValue"){
return updateObject(answer, { value: newValue })
}
else{
return answer
}
}
else{
return answer
}
})
}}
console.log(item);
})
}
从操作发送的参数中的所有值都是正确的。{}所以函数 get 是正确的信息。
位于状态内部的文档的 mongoDB Schema(我不包括所有道具,只包括相关的。):
var questionModel = new Schema({
_id: Schema.Types.ObjectId,
qpId: Schema.Types.ObjectId,
answers: [answerModel],
description: String
});
var answerModel = new Schema({
_id: Schema.Types.ObjectId,
questionId: Schema.Types.ObjectId,
answerText: String,
value: Schema.Types.Mixed,
settings: settingsModel,
});
var settingsModel = new Schema({
disabled: Boolean,
answerType: String,
visibility: Boolean,
setVisibilityPaths:[{_id:false, questionId: Schema.Types.ObjectId, answerId: Schema.Types.ObjectId}],
setDisabledPaths: [{_id:false, questionId: Schema.Types.ObjectId, answerId: Schema.Types.ObjectId}],
setAnswerValue:[{_id:false, questionId: Schema.Types.ObjectId, answerId: Schema.Types.ObjectId, answerValue: Schema.Types.Mixed}],
setAnswerVisibility: Boolean,
setAnswerDisabled: Boolean
}, {id: false});
【问题讨论】:
-
用括号 (
{...}) 分隔if和else语句的正文,您会发现问题所在。 -
我做到了,但我仍然没有看到问题:/
标签: javascript reactjs redux react-redux