当前位置: 首页 > 知识库问答 >
问题:

无法用setstate清除受控输入

纪晨
2023-03-14
createNewBoard = (e) => {
  e.preventDefault();
  const newItem = { boardname: this.state.currentValue, todo: []};
  const updatedList = [...this.state.boards, newItem]
  this.setState({ 
    boards: updatedList, 
    currentValue: '' 
 });
}
render() {
    return(
      <>
        { this.state.isBoardOpen ? 
        <ActiveCreateBoard 
          toggleCreateBoard={this.toggleCreateBoard} 
          onChange={this.onChange} 
          currentValue={this.currentValue}
          createNewBoard={this.createNewBoard} 
        /> : <CreateBoard toggleCreateBoard={this.toggleCreateBoard}/> }

        <ShowAllBoards boards={this.state.boards}/>
      </>
    )
  }

不更新输入字段的组件本身

const ActiveCreateBoard = ({ toggleCreateBoard, onChange, currentValue, createNewBoard }) => {
    return(
        <div className="card">
            <div className="card-body">
                <form onSubmit={createNewBoard}>  
                    <h4>Pick a board name</h4>
                    <input 
                    type="text" 
                    onChange={onChange} 
                    value={currentValue}/>
                </form>
            </div>
            <button onClick={toggleCreateBoard}>close</button>
        </div>
    )
}

This.SetState正在清除状态中的currentValue,但输入字段的值没有反映状态中的更新

共有1个答案

濮阳立果
2023-03-14

您的输入字段没有更新,因为您正在向下传递this.currentvalue,该值将是未定义的:

<ActiveCreateBoard 
  toggleCreateBoard={this.toggleCreateBoard} 
  onChange={this.onChange} 
  currentValue={this.currentValue}
  createNewBoard={this.createNewBoard} 
/>

相反,您需要从state向下传递值。

更改为使用this.state.currentValue:

<ActiveCreateBoard 
  toggleCreateBoard={this.toggleCreateBoard} 
  onChange={this.onChange} 
  currentValue={this.state.currentValue} // <---
  createNewBoard={this.createNewBoard} 
/>
 类似资料:
  • 问题内容: 我尝试用硒选择输入,但是当我使用它时,它不起作用: 我正在使用Mac,所以Keys.CONTROL无法正常工作,有人可以帮助我选择输入或清除输入吗? 谢谢 问题答案: Mac无法使用您需要的 试试:

  • 我有一个文本字段,当用户插入一定数量的字符时,程序应该将其放入JTable并清除文本字段,但它会为

  • 我有一个ReactJS应用程序,并使用一个简单的html标记创建了一个受控组件。 问题是,当在microsoft edge中从刷新按钮或按F5时(从navbar进行enter操作很好),输入值不能正确地清除,它们会被卡住。如果我开始输入表单的任何输入,那么它们就会消失。 我已经尝试过: -清除windows.onload上的值 -在输入标记上设置autocomplete='off' -创建超时函数

  • 本文向大家介绍Android输入框控件ClearEditText实现清除功能,包括了Android输入框控件ClearEditText实现清除功能的使用技巧和注意事项,需要的朋友参考一下 本文给大家带来一个很实用的小控件ClearEditText,就是在Android系统的输入框右边加入一个小图标,点击小图标可以清除输入框里面的内容,IOS上面直接设置某个属性就可以实现这一功能,但是Android

  • 问题内容: 我在下面使用一个变量。 这由我的输入字段使用。 激活后,我想清除我的输入字段。但是,我不确定该怎么做。 另外,如本例所示,有人指出我应该将属性用于输入值。我还不清楚这到底意味着什么。在这种情况下有什么意义? 问题答案: 您可以使用输入类型=“重置”