Javascript 对象元素未定义

标签 javascript reactjs object

尝试将存储在 dataEdited 中的 namedaydob 元素的值记录为对象。Two的元素显示未定义,只有一个显示正确的值。 这是代码

/*    two-way state binding   */
dataChange(event){
        const target = event.target;
        const value = target.value; //gets value of the textbox
        const name = target.name;

        this.setState({ dataEdited: {[name]: value} });
    }
handleUpdate(event){
        event.preventDefault();
        const {name,day,dob} = this.state.dataEdited;
        console.log(name, day, dob);

        /* this.setState({ toggle: false }) */

    }   

状态

this.state = {
            name: '',
            day: '',
            dob: '',
            items : [],
            currentItem: {},
            dataEdited: {},
            toggle: false,
            loading: false
        }

渲染

<form onSubmit={this.handleUpdate}>
                                <input 
                                    className=""
                                    name="name"                             
                                    onChange={this.dataChange}
                                    defaultValue={this.state.currentItem.name}
                                    placeholder= "Celebrant's Name" 
                                    ref={name => this.name = name}
                                    required /> 
                                <input 
                                    className=""
                                    type="number" 
                                    name="day"
                                    min="1" 
                                    max="31"
                                    ref={day => this.day = day}
                                    onChange={this.dataChange}
                                    defaultValue={this.state.currentItem.day}
                                    placeholder= "day"  />
                                <input 
                                    className=""
                                    name="dob"
                                    type="month"                                
                                    onChange={this.dataChange}
                                    defaultValue={this.state.currentItem.dob} />

                                <button type="submit">update</button>
                                <button onClick={this.handleEditCancel}>cancel</button>
</form>

这是控制台上的结果

undefined undefined "2020-08"

我不明白这怎么可能,我能得到解释吗?另外,我该如何解决这个问题?

最佳答案

当您执行 this.setState({ dataEdited: {[name]: value} }); 时,您会覆盖分配给 dataEdited 的对象中的其他值。

您应该将其更改为 this.setState({ dataEdited: { ...this.state.dataEdited, [name]: value} }); 以保留 中以前的值this.state.dataEdited

更新 (感谢@JMadelaine):您应该使用 this.setState(prev => ({ dataEdited: { ...prev.dataEdited, [ name]: value}})); 以确保并发状态更改不会影响 setState()

更多信息:https://stackoverflow.com/a/50837784/10201813

关于Javascript 对象元素未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60988116/

相关文章:

javascript - 重新调用 Vue.js html 解析

javascript - 使用谷歌图表仪表板中的过滤器聚合数据

javascript - angular js中单个页面中的多个应用程序

javascript - 如何使用 classList 获取 React 组件引用以更改其类?

javascript - 查找数组中要删除的特定对象

javascript - 如何使用 Javascript 从 Iframe 实现跨域 URL 访问?

reactjs - Webpack - 无法解析背景图像的路径

node.js - 无法从 react-script 卸载 webpack

javascript - 字典:JavaScript 中的映射与对象

c# - 有没有一种快速的方法可以将实体转换为 .csv 文件?