失败的形式propType:你为表单字段提供了一个`value`道具,没有`onChange`处理程序

Nic*_*ock 47 javascript forms jquery reactjs

当我加载我的反应应用程序时,我在控制台中收到此错误.

警告:表单propType失败:您为value没有onChange处理程序的表单字段提供了prop .这将呈现一个只读字段.如果该字段应该是可变的使用defaultValue.否则,设置onChangereadOnly.检查渲染方法 AppFrame.

我的AppFrame组件如下:

class AppFrame extends Component {
    render() {
        return (
            <div>
                <header className="navbar navbar-fixed-top navbar-shadow">
                    <div className="navbar-branding">
                        <a className="navbar-brand" href="dashboard">
                            <b>Shire</b>Soldiers
                        </a>
                    </div>
                    <form className="navbar-form navbar-left navbar-search alt" role="search">
                        <div className="form-group">
                            <input type="text" className="form-control" placeholder="Search..."
                                   value="Search..."/>
                        </div>
                    </form>
                    <ul className="nav navbar-nav navbar-right">
                        <li className="dropdown menu-merge">
                            <span className="caret caret-tp hidden-xs"></span>
                        </li>
                    </ul>
                </header>

                <aside id="sidebar_left" className="nano nano-light affix">

                    <div className="sidebar-left-content nano-content">

                        <ul className="nav sidebar-menu">
                            <li className="sidebar-label pt20">Menu</li>
                            <li className="sidebar-label">
                                <IndexLink to="/" activeClassName="active">Dashboard</IndexLink>
                            </li>
                            <li className="sidebar-label">
                                <Link to="/fixtures" activeClassName="active">Fixtures</Link>
                            </li>
                            <li className="sidebar-label">
                                <Link to="/players" activeClassName="active">Players</Link>
                            </li>
                        </ul>

                    </div>

                </aside>
                <section id="content_wrapper">
                    <section id="content" className="table-layout animated fadeIn">
                        {this.props.children}
                    </section>
                </section>
            </div>

        )
    }
}

export default AppFrame;
Run Code Online (Sandbox Code Playgroud)

我正在努力弄清楚我在这里做错了什么.应用程序启动并运行,但我试图删除所有控制台警告/错误.

小智 78

你已经在你的搜索输入中直接输入了一个值,我没有看到它的好处,因为你已经有了一个placholder.您可以从以下位置删除值:

<input type="text" className="form-control" placeholder="Search..." value="Search..."/>
Run Code Online (Sandbox Code Playgroud)

对此:

<input type="text" className="form-control" placeholder="Search..." />
Run Code Online (Sandbox Code Playgroud)

或者,如果您认为必须拥有它,请将其设置为defaultValue:

<input type="text" className="form-control" placeholder="Search..." defaultValue="Search..."/>
Run Code Online (Sandbox Code Playgroud)

文档:https://facebook.github.io/react/docs/uncontrolled-components.html#default-values

  • 有没有人在使用提交按钮时遇到此错误?这对我来说没有意义。对于“input type="submit"”,“value”应提供文本。为什么在这种情况下会出现此错误? (2认同)
  • 对我来说它不起作用,我不明白为什么,我已经看到很多很多帖子,我总是犯同样的错误,因为我不能在我的输入中写 (2认同)

rez*_*e08 11

如果您不通过此输入字段获取用户的输入值,则需要通过设置defaultValue使该字段为只读。

如果您想设置该值并涉及用户交互。您应该发送onChange事件以更新初始值的状态。这就像双向装订作为角度支撑。

state = {
   keyword: 'test' 
} 

inputChangedHandler = (event) => {
    const updatedKeyword = event.target.value;
    // May be call for search result
}

render() {
  return (
      <input 
         type="text" 
         placeholder="Search..."
         value={this.state.keyword} 
         onChange={(event)=>this.inputChangedHandler(event)} />
   );
} 
Run Code Online (Sandbox Code Playgroud)

  • 在更改处理程序中设置 UpdatedKeyword 如何更改输入字段中显示的内容? (2认同)
  • 我确信他们这样设计有他们的理由,但对我来说毫无意义。 (2认同)

Tou*_*uer 7

尝试这个,

const [email, SetEmail] = useState("");
Run Code Online (Sandbox Code Playgroud)
<Form.Control
    onChange={e => SetEmail(e.target.value)}
    type="email"
    name="email"
    value={email || ""}
/>
Run Code Online (Sandbox Code Playgroud)