【问题标题】:ReactJS: input is not editableReactJS:输入不可编辑
【发布时间】:2019-02-24 17:31:43
【问题描述】:

我正在创建一个研究“Laravel-ReactJS”应用程序,其中我在组件中有一个表单。问题是我所做的状态并没有得到更新。

但是,我在独立的 React 应用程序(没有 laravel)中尝试了相同的代码,并且代码运行没有任何问题。

这是我的代码:

constructor()
{
  super();

  this.state = {
    title: ''
  };
}

onSetTitle(event)
{
  console.log(event.target.title);

  this.setState({
    title: event.target.title
  });

  console.log(this.state.title);
}

render (
  return (
    <div className="col-lg-12 col-md-6 col-sm-6 form-group">
      <label>Name<em>*</em></label>
      <input 
        type="text" 
        name="title" 
        id="title" 
        className="form-control" 
        onChange={this.onSetTitle.bind(this)} 
        value={this.state.title}
      />
    </div>
  )
)

请告诉我我在这里做错了什么。

我正在关注这个 youtube 教程 https://youtu.be/aDpoKnBlCCM

【问题讨论】:

    标签: reactjs input readonly


    【解决方案1】:

    输入的值将出现在event.targetvalue 属性中,而不是title

    onSetTitle(event) {
      this.setState({
        title: event.target.value
      });
    }
    

    class App extends React.Component {
      constructor() {
        super();
    
        this.state = {
          title: ""
        };
      }
    
      onSetTitle(event) {
        this.setState({
          title: event.target.value
        });
      }
    
      render() {
        return (
          <div className="col-lg-12 col-md-6 col-sm-6 form-group">
            <label>
              Name<em>*</em>
            </label>
            <input
              type="text"
              name="title"
              id="title"
              className="form-control"
              onChange={this.onSetTitle.bind(this)}
              value={this.state.title}
            />
          </div>
        );
      }
    }
    
    ReactDOM.render(<App />, document.getElementById("root"));
    <script src="https://unpkg.com/react@16/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
    
    <div id="root"></div>

    【讨论】:

      【解决方案2】:

      如果你想获得一个合成事件value,你应该通过event.target.value访问它

      event.target.title 将永远是 undefined

      这就是您的输入值没有更新的原因。

      你应该这样做:

      onSetTitle(event)
      {
      
        this.setState({
          title: event.target.value
        });
      
      }
      

      ———————————

      Syntetic events work just like native HTML events

      【讨论】:

      猜你喜欢
      • 2014-12-10
      • 1970-01-01
      • 1970-01-01
      • 2018-02-01
      • 2018-07-06
      • 1970-01-01
      • 2022-07-22
      • 2011-04-10
      • 2020-12-12
      相关资源
      最近更新 更多