javascript - react怎么改变state中object?

查看:182
本文介绍了javascript - react怎么改变state中object?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

constructor(props){
    super(props);
    this.state = {
        postdata : {},
        errormess : '' 
    }
    this.savedata = this.savedata.bind(this);
}

closeSlide(){
    this.props.callbackParent();
}

// 费用类型
handleType(e){
    let value = e.target.value;
    this.setState( Object.assign({},this.state.postdata,{ type: value }) )
    // this.setState({
    //     postdata : {
    //         type : value
    //     }
    // })
}

// 产生费用时间
handleDate(e){
    let value = e.target.value;
    this.setState( Object.assign({},this.state.postdata,{ date: value }) )
    // this.setState({
    //     postdata : {
    //         date : value
    //     }
    // })
}

// 费用金额
handleMoney(e){
    let value = e.target.value.trim();
    this.setState( Object.assign({},this.state.postdata,{ money: value }) )
    // this.setState({
    //     postdata : {
    //         money : value
    //     }
    // })
}

// 费用由来
handleDesc(e){
    let value = e.target.value.trim();
    this.setState( Object.assign({},this.state.postdata,{ desc: value }) )
    // this.setState({
    //     postdata : {
    //         desc : value
    //     }
    // })
}

savedata(){
    console.log(this.state.postdata);
}

最后保存提交的postdata并没有保存这四个字段

constructor(props){
    super(props);
    this.state = {
        postdata : {
            type : '',
            date : '',
            money : '',
            desc :'',
        },
        errormess : '' 
    }
    this.savedata = this.savedata.bind(this);
}

closeSlide(){
    this.props.callbackParent();
}

// 费用类型
handleType(e){
    let value = e.target.value;
    this.setState({
        postdata: Object.assign({},this.state.postdata,{type: value})
    })
}

// 产生费用时间
handleDate(e){
    let value = e.target.value;
    this.setState({
        postdata: Object.assign({},this.state.postdata,{date: value})
    })
}

// 费用金额
handleMoney(e){
    let value = e.target.value.trim();
    this.setState({
        postdata: Object.assign({},this.state.postdata,{money: value})
    })
}

// 费用由来
handleDesc(e){
    let value = e.target.value.trim();
    this.setState({
        postdata: Object.assign({},this.state.postdata,{desc: value})
    })
}

savedata(){
    console.log(this.state.postdata);
}

解决方案

setState(object nextState[, function callback])

合并 nextState 和当前 state。不是立即生效,而是在 render 执行后更新 state

初始 state

{
    postdata: {},
    errormess: ""
}

每次执行 setState 其实是 {type: xxx}, {value: xxx} ··· 这些对象与初始 state 合并。而不是合并到了 postdata 上。

this.setState({postdata: Object.assign(...)})

可以这样调用试试

这篇关于javascript - react怎么改变state中object?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆