反应,绑定输入值

Posted

技术标签:

【中文标题】反应,绑定输入值【英文标题】:React, Binding input values 【发布时间】:2016-03-06 09:37:51 【问题描述】:

我在绑定输入值时遇到了一些问题,我已经在我的应用程序的另一个组件上完成了它并且它运行良好,但不知何故我无法让它在另一个组件上运行。我只收到第一个字母而不是整个文本

这是我的组件

class Post extends Component 

  constructor(props) 
    super(props);
    this.state = 
      post: this.props.data,
      comment: ''
    
    Post.context = this;
  
render() 
<input type="text" value=this.state.comment onChange=this.handleChange placeholder="Write a comment..." />
      <button className="button comments" onClick=this.handleClick.bind(null,this.state.post.id)></button>

 handleChange(e) 
    Post.context.setState(comment: e.target.value);


我也尝试使用来自 React 网站的示例,但结果相同:

 render() 
     var valueLink = 
      value: this.state.comment,
      requestChange: this.handleChange
    ;
 render() 
    <input type="text" valueLink=valueLink placeholder="Write a comment..." />
          <button className="button comments" onClick=this.handleClick.bind(null,this.state.post.id)></button>
    
     handleChange(newValue) 
        Post.context.setState(comment: newValue);
    
    

有人知道为什么会这样吗?

【问题讨论】:

【参考方案1】:

您必须将inputbutton 包裹在 元素(例如div)中。组件只能有一个根元素。

你可以像我的例子一样使用.bind,避免使用Post.context = this;

class Post extends React.Component 
  constructor(props) 
    super(props);

    this.state = 
      post: this.props.data,
      comment: ''
    ;
  

  render() 
    return <div>
      <input 
        type="text" 
        value=this.state.comment 
        onChange= this.handleChange.bind(this)  
        placeholder="Write a comment..." />

      <button 
        className="button comments" 
        onClick= this.handleClick.bind(this, this.state.post.id)>Button</button>
    </div>
    

  handleClick(postId, e) 
    console.log( postId );
    console.log( this.state.comment );
  

  handleChange(e) 
    this.setState( comment: e.target.value );
  

Example

注意: React 16.* 包含新功能 - Fragments,它允许跳过额外的根元素。

render() 
  return (
    <>
      <input 
        type="text" 
        value=this.state.comment 
        onChange= this.handleChange.bind(this)  
        placeholder="Write a comment..."
      />

      <button 
        className="button comments" 
        onClick= this.handleClick.bind(this, this.state.post.id)
      >
        Button<
      /button>
    </>
  )

【讨论】:

以上是关于反应,绑定输入值的主要内容,如果未能解决你的问题,请参考以下文章

如何手动触发点击输入框

角反应形式,输入的默认值

在文本输入中发送值反应本机

如何使用模型驱动/反应形式修改指令中的输入值

反应输入值不会在按钮更改时重新呈现

如何更改输入反应本机的值