reactjs - React 表单正在呈现以前的值而不是当前值
问题描述
我的反应表单使用 useContext 将值保存到全局状态。尝试将值从 1-5 更改为呈现前一个数字而不是当前数字。我怎样才能改变这种行为?
沙盒链接https://codesandbox.io/s/funny-antonelli-0d0rl?file=/src/UpdateForm.js
此代码是在https://stackoverflow.com/users/5146848/sifat-haque的帮助下制作的
解决方案
更新:我修复了你的代码!您的 ValueContext 在同一个文件中也有错误。您正在使用 updateValue,但未在上下文中设置(setValue 是正确的)。所以我将 2 个 updateValue 调用更改为 setValue,瞧!
第二次更新(更多的旁注):我会避免重用这么多相同或相似的变量名,如 ItemValue 和 Itemvalue,这确实会使代码更难阅读,并使这些类型的错别字更容易制作,并且更难修复。我也会尝试使用 camelCase 对非组件项目做出反应,例如(itemValue)或至少(item-value)。
最后编辑:您还在此组件的渲染方法中将“三”拼错为“树”!
请参阅原始评论以获取完整的固定代码...希望我有所帮助!
原文:我还没有弄清楚您的代码,但我注意到您在 UpdateForm 中的代码中有错字。您有:itemvalue(未定义),当我进入 ValueContext 页面时,我注意到您将其列为:Itemvalue。请务必检查其他拼写错误并确保您使用正确的变量。
工作代码:
import { ValueContext } from "./ValueContext";
const UpdateForm = ({ id }) => {
const [ItemValue, setItemValue] = useState();
const [value, setValue] = useContext(ValueContext);
const addValue = (event) => {
const updatedData = value.map((obj) => {
if (obj.id === id) {
return { ...obj, Itemvalue: ItemValue };
} else return obj;
});
setValue(updatedData);
console.log(ItemValue);
};
const updateItemValue = (event) => {
event.preventDefault();
setItemValue(event.target.value);
addValue();
};
return (
<>
<form>
<label> Value: </label>
<select value={ItemValue} onChange={updateItemValue}>
<option value={0}>zero</option>
<option value={1}>one</option>
<option value={2}>two</option>
<option value={3}>tree</option>
<option value={4}>four</option>
<option value={5}>five</option>
</select>
</form>
</>
);
};
export default UpdateForm;
推荐阅读
- xcode - React Native:将项目升级到 0.58.0 后 iOS 构建崩溃
- r - 在保持形状覆盖的同时将图例分成两列
- ios - 键盘有时会显示在 iOS 的文本字段选择器视图中
- python - python if-else递归函数返回不需要的值
- s4sdk - s4sdk - Jenkins 中的 MTA 构建抛出错误
- java - 自定义 BindingResult 字段错误信息
- python - 使用 pandas 动态导入 EXCEL 表格并将其分配给 Python 中的 DataFrame
- firebase - Firestore 为 noSQL 和 Flutter 复制 SQL 连接
- selenium - Docker 容器上的 Protractor 异步并行测试
- go - 如何导入本地模块golang?