从输入中获取价值并使用按钮

时间:2015-09-24 21:20:39

标签: javascript reactjs

我正在使用input元素和button元素创建组件。 我需要获取输入value并使用按钮,例如。我怎样才能做到这一点? 这是我的代码:

var InputSearch = React.createClass({
  getInitialState: function() {
    return {
      value: 'pics'
    }
  },

  handleChange: function() {
    this.setState({
      value: event.target.value
    });
  },

  render: function() {
    return (
      <input type="text" value={this.state.value} onChange={this.handleChange} />
    )
  }
});


var ButtonSearch = React.createClass({
  handleClick: function(event) {
    console.log(this.state.value); // here's go the input value
  },

  render: function() {
    return (
      <button onClick={this.handleClick}>GO! </button>
    )
  }
});

var Search = React.createClass({
  render: function() {
    return (
      <div>
        <InputSearch />
        <ButtonSearch />
      </div>
    )
  }
});

React.render(
  <Search />,
  document.getElementById('result')
);

3 个答案:

答案 0 :(得分:2)

这里的一个问题是你正在打破一个好的规则 - 分开聪明和愚蠢的组件。 https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0

这样做的方法是让一个父组件保存子组件的所有状态和功能,并将所有这些组件作为道具传递......

//Our smart parent
var SearchContainer = React.createClass({
    getInitialState : function() {
        return {
            value : 'pics'
        }
    },

    handleInput : function(event) {
        this.setState({value: event.target.value});
    },

    render : function() {
        return (
            <div>
                <InputSearch value={this.state.value} onChange={this.handleInput} />
                <ButtonSearch value={this.state.value} />
            </div>
        )
    }
});

//Our dumb children
var InputSearch = React.createClass({
    propTypes : {
        onChange : React.PropTypes.func.isRequired,
        value    : React.PropTypes.string
    },

    render : function() {
        return (
            <input type="text" value={this.props.value} onChange={this.props.onChange} />
        )
    }
});


var ButtonSearch = React.createClass({
    propTypes : {
        value : React.PropTypes.string
    },

    handleClick : function() {
        console.log(this.props.value); //log value
    },

    render : function() {
        return (
            <button onClick={this.handleClick}>GO! </button>
        )
    }
});

React.render(<Search />, document.getElementById('result'));

这里我们将处理函数从父节点传递给子节点,因此输入不关心它在更改时触发的事件会发生什么,它只需要知道它有一个名为onChange的prop这是一个函数并且它调用了

父(SearchContainer)处理所有这些功能,并将更改后的状态传递给按钮和输入......

希望有所帮助

答案 1 :(得分:1)

你在handleChange中遗漏了这个事件。

handleChange: function(event) {
  this.setState({
    value: event.target.value
  });
},

答案 2 :(得分:0)

反应的主要架构是父子/主奴隶原则。

如果要在组件之间传递值,则必须在。

之间创建关系

例如

您创建的主组件具有很少的默认状态。

var MyMasterComponent = React.createClass({
 getInitialState: function(){
  ...
 },
 render: function(){
  return(
   <ChilComponent1 textiwanttopass={this.state.text} />
  );
 }
});

使用该方法,您将调用主组件中的另一个组件的渲染。这样,您可以将值从状态传递到另一个组件。

在这种情况下,您可以使用this.props.textiwanttopass

访问传递的文本