我有一个辅助函数,它应该为父组件设置状态,从而触发子组件的 onUpdate:
validateInput: function (inputValue, inputName, inputRules, setFormState, formFields) {
let hasError = false;
let errorText = false;
if (!inputValue && inputRules.required) {
hasError = true;
errorText = 'This field is required.';
}
else {
hasError = false;
errorText = false;
};
state = { fields: Object.create(formFields) };
state.fields[inputName].hasError = hasError;
state.fields[inputName].errorText = errorText;
return setFormState(state);
}
这给了我想要的效果并且子组件更新。但是如果我在父组件中记录状态,我会得到空对象。当我登录时,这些值是在 proto 下找到的,我实际上并没有完全理解 JavaScript 的整个对象原型(prototype)。
如果我修改代码,则状态变量如下
state = { fields: formFields };
情况出现逆转。我在父组件中获得了正确的状态,但未触发子组件更新。
使用 Object.create() 有哪些替代方案?为什么会发生这种情况?
我还想补充一点,我知道这个问题的标题很愚蠢,这真的让我迷失了方向。
最佳答案
不太确定 setFormState
或 formFields
是什么样子,但您几乎可以肯定避免在此处使用原型(prototype)。
例如,您可以使用 Object.assign
合并所有属性:
let form = { hasError, errorText };
let fields = Object.assign({}, formFields, form);
let state = { fields };
return setFormState(state);
这将创建一个新的 fields
对象,该对象具有 formFields
和 form
的所有属性。
关于javascript - Object.create 有哪些替代方案(将状态设置为 React 组件时)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38106642/