首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReactJs -无法通过重置值道具清除Textarea

ReactJs -无法通过重置值道具清除Textarea
EN

Stack Overflow用户
提问于 2018-04-06 04:23:06
回答 2查看 1.3K关注 0票数 0

我现在的代码是:

代码语言:javascript
复制
constructor(props) {
    super(props);
    this.state = {
        data: [],
    };
}

componentWillMount() {
    this.getDetails();
}

//this.getDetails() will load this.state.data, which will have multiple records. Each record has many fields, including "Rationale". 
//Some other functions

render() {

var resolutionList = this.state.data.map((item, index) =>
        <tr key={index} className={(() => { if (item.ScreenChange == "Deleted") return ("danger") })()}>
            <td className="">Some</td>
            <td className="">Other</td>
            <td className="">Table</td>
            <td className="">Data</td>
            <td className="col-sm-3">
                <textarea className="form-control" name={index} id={index} rows="4" cols="50" maxLength="4000" style={{'resize':'none'}}
                    value={item.Rationale}
                    onChange={this.handleRationalChange}
                />
            </td>
        </tr>
    );
}
return (
{resolutionList}
)

现在,我想强制清除文本区域中的数据。我创建了下面的函数来重置this.state.data。其他字段被成功地更新为空白,除了“基本原理”字段。

通过调试,我可以看到this.state.datai.Rationale实际上已经是null了。然而,屏幕仍然显示旧的值。这里少了什么?

代码语言:javascript
复制
<button type="button" className="btn btn-default" onClick={() => this.handleNewForm()}>Clear data</button>

handleNewForm = () => {
    for (i = 0; i < this.state.data.length; i++) {
        this.state.data[i].some = null;
        this.state.data[i].other = null;
        this.state.data[i].fields = null;
        this.state.data[i].Rationale = null;

    }
    this.forceUpdate();
}

编辑

我尝试过setState,但是它仍然没有清除数据,或者给了我语法错误。

这给了我语法错误:

代码语言:javascript
复制
this.setState( data[i].Rationale : null);

这仍然不清楚数据:

代码语言:javascript
复制
this.setState( this.state.data[i].Rationale = null);
EN

回答 2

Stack Overflow用户

发布于 2018-04-06 04:28:11

handleNewForm中,您需要使用setState,而不是状态。

代码语言:javascript
复制
handleNewForm = () => {
    for (i = 0; i < this.state.data.length; i++) {
      this.setState({data[i]: {Rationale: null, other: null}});
    }
    this.forceUpdate();
}

请注意,您需要确保data[i]本身存在并且不是null,否则您将得到一个类似于"cannot update value of undefined..."的错误。

另一种可能起作用的方法是:

代码语言:javascript
复制
dataObj = {...this.state.data[i]};
dataObj.Rationale = null;
dataObj.other = null;                      
this.setState({data[i], dataObj});

代码语言:javascript
复制
dataObj = {...this.state.data[i], Rationale: null, other: null};
this.setState({data[i], dataObj});
票数 0
EN

Stack Overflow用户

发布于 2018-04-06 05:07:23

您需要使用setState() (您这样做的尝试是无效的Javascript)。将您的handleNewForm函数转换为:

代码语言:javascript
复制
handleNewForm = () => 
  this.setState({
    data: this.state.data.map(dataItem => (
      { 
        ...dataItem, 
        some: null,
        other: null, 
        fields: null, 
        Rationale: null 
      }
    )) 
  })
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49685269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档