javascript-从输入中获取价值并在按钮上使用

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

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')
);

解决方法:

这里的一个问题是您违反了一个好的规则-分离智能组件和哑组件. 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的道具即该函数就可以调用它.

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

希望能有所帮助

上一篇:javascript-使用React Client应用程序在回调中实现athoring之后,节点express react oauth传递访问令牌


下一篇:javascript-如何使用startAccessor在React-Big-Calendar中指定日期