关于取数据的问题

#1

在react中可以在标签中使用value={this.state.XX}获取后台传回的数据,但是在用户界面上无法选择或修改
而defaultValue属性无法生效,请问该如何使用

#2

选择和修改标签的数据, 你就根据需求修改 state 就行了, 只是把 state 作为一个中转就行了!

#3

哦,你的意思是,select标签选择的值直接就是某一个状态,当后台传回该值时前台展示就自行修改了是吗?

#4

嗯嗯。。因为 标签的值是 this.state.selectValue , 当后台传值过来的时候, 把值保存到 this.state.selectValue 中, React 会 重渲染组件的!

#5

我现在是可以通过后台渲染回来了,但是渲染回来以后由于defaultValue不能生效,所以渲染回来以后反而界面上没办法修改或者编辑了。我是希望这个选择标签既能在界面上实时的选择并提交,而当页面加载这个组件的时候又显示后台目前的值这样。现在是能显示后台的值,我从后台改了,它可以正确显示,state我打印出来结果也正确,但是就是页面上不接受用户编辑,defaultValue也没生效。

#6

你先不从后台传值过来, 直接在前端设置默认的 defaultValue , 这样看看, 先把问题找出来!

#7

我找了个折中的办法,现在所有的选择或者输入都是修改某个和后台获取值的赋予的相同状态并渲染到选择框的state中,这样就统一了。但是总是感觉不够直接,曲线救国。不过功能也能实现就是了。

#8

如果很忙, 先继续做下去再说。。 把那个问题记录下来, 有空了, 再继续研究研究哈!

#9

这个问题目前已经得到了比较完善的解决,其根源是这样的:
1、当页面渲染的时候元素的defaultValue属性才起作用
2、页面接收到的state改变不能再被渲染至defaultValue中
所以,遇到在react中需要编辑功能的时候应该做如下操作:
1、如果有设定初始值的操作的时候,一定要注意,初始值加载至defaultValue后其后台再获取的值将不再被修改,所以,我们不能盲目的直接给defaultValue一个初始值,而必须等到当页面被渲染的时候再对defaultValue赋值,这个在我这里处理select标签时,直接用了一个getInitialState:function(){return({value:“”})}渲染页面时,加一句if(this.state.value!=""){}这样一来就不会在还没有后台数据回到页面之前渲染页面了。而如果后台没有数据,页面也能保证初始状态。
2、或者加入onChange方法,通过onChange方法将当前修改的值写入状态完成提交操作,这个方法通过state作为一个中间量来完成onChange方法通过后台获取到的数据,使用this.state.value,渲染至需要编辑的对话框,然后使用onchang方法完成对当前对话框的修改,将当前值使用e.currentTarget.Value或者用ref来取值。