You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中POST状态未更新:post.title与post.body无法正常更新求助

解决post.title和post.body无法正常更新的问题

可能的原因及解决方案:

1. 自定义组件MyInput未正确绑定状态

你使用了自定义的MyInput组件,首先要确认这个组件内部是否正确将外部传入的value和onChange传递给原生<input>元素。如果MyInput没有正确处理这两个props,输入框内容不会和状态联动,自然无法更新post.title和post.body。

检查MyInput的实现,确保它类似这样:

function MyInput({ value, onChange, ...rest }) {
  return <input value={value} onChange={onChange} {...rest} />;
}

2. 状态更新存在闭包问题

当前你用对象展开的方式更新状态:setPost({ ...post, title: e.target.value }),这种方式在部分场景下会因闭包捕获旧状态导致更新异常。改用函数式更新能确保每次拿到最新状态:

修改后的状态更新代码:

// Title输入框的onChange
onChange={(e) => setPost(prevPost => ({ ...prevPost, title: e.target.value }))}

// Body输入框的onChange
onChange={(e) => setPost(prevPost => ({ ...prevPost, body: e.target.value }))}

修改后的完整代码示例

export default function CreatePost() {
    const [post, setPost] = useState({ title: "", body: "" });

    function addNewPost(e) {
        e.preventDefault();
        const newPost = {
            ...post,
            id: Date.now(),
        };
        console.log(newPost);
    }

    return (
        <form>
            <MyInput
                placeholder="Enter title"
                onChange={(e) => setPost(prev => ({ ...prev, title: e.target.value }))}
                value={post.title}
                type="text"
            />
            <MyInput
                placeholder="Enter description"
                value={post.body}
                type="text"
                onChange={(e) => setPost(prev => ({ ...prev, body: e.target.value }))}
            />
            <MyButton onClick={addNewPost}>Create post</MyButton>
        </form>
    );
}

先排查MyInput的实现是否正确,再替换状态更新的方式,基本就能解决状态不更新的问题。

内容的提问来源于stack exchange,提问作者Egor Yakimov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 04:13:23