我正在使用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')
);
答案 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