关于小程序js中this.setData方法的一些看法

关于小程序js中this.setData方法的一些看法


今天在实现小程序的一个功能:实时监听用户在输入框中填写的字数,包括选择的图片。首先来看data:

data:{
     
    opinion:"",      //意见
    word_count:0,    //意见字数,最大200
    src:[],          //图片地址
    image_count:0,   //图片数量
    wechat:""        //微信号
  },

然后wxml文件如下(效果如图)

<view>
				<input
				class="input"
				maxlength="200" 
				bindinput="textInput"
				placeholder="点击这里输入您的建议~" 	
				/>
				<view class="word-count">{
     {
     word_count}}/200</view>
			</view>

关于小程序js中this.setData方法的一些看法_第1张图片
并且,设想能够实时地监听输入的字数,于是在js中写了一个textInput方法,对应input中的bindinput="textInput",同时textInput方法中包含一个setData方法,目的是把输入框中的信息,返回给js中的data。具体用法可参考:https://www.jb51.net/article/168701.htm
但是这个时候,出现了一个问题,在同一个setData方法中,如果先将e.detail.value赋值给data中的opnion,然后将opnion的length赋值给word_count,会出现不能同步更新data中的变量,具体可参考下述代码及运行结果:

textInput(e){
     
  this.setData({
     
    opinion:e.detail.value,
    word_count:this.data.opinion.length
  })
  console.log("第一次统计字数:"+ this.data.word_count)
  this.setData({
     
    word_count:this.data.opinion.length
  })
  console.log("第二次统计字数:"+ this.data.word_count)
},

关于小程序js中this.setData方法的一些看法_第2张图片
关于小程序js中this.setData方法的一些看法_第3张图片
我先后输入了abc。然后根据代码和控制台输出结果,我们可以看出,第一个setData方法中,先将e.detail.value赋值给data中的opnion,然后将opnion的length赋值给word_count,我们可以发现,在同一个setData方法中,他opnion的值还没有完成赋值,也就是此时的this.data.opinion.length统计的还是setData方法以前的opnion.length。
然后我们再写下一个setData方法,再将this.data.opinion.length赋值给image_count,此时控制台结果正常。
结论:setData方法中所有赋值要在这个方法完成后才能成功赋值给data中的变量。

你可能感兴趣的:(小程序,js)