Mat*_*son 7 javascript reactjs
我正在用ReactJS构建一个电阻计算器.我有一个声明如此的组合组件:
var ResistanceCalculator = React.createClass({
getInitialState: function() {
return {bands: [0,0,0,0,0]}
},
componentDidMount: function() {
console.log(this.props.children); // => undefined
},
render: function() {
return (
<div>
<OhmageIndicator bands={this.state.bands} />
<SVGResistor bands={this.state.bands} />
<BandSelector band={1} />
<BandSelector band={2} />
<BandSelector band={3} />
<BandSelector band={4} />
<BandSelector band={5} />
</div>
);
}
});
Run Code Online (Sandbox Code Playgroud)
BandSelector呈现<select>元素,当一个更改时,我想更新ResistanceCalculator状态.所以我的想法是我需要将一个事件监听器绑定到ResistanceCalculator子级.然而this.props.children似乎是空的.为什么是这样?
che*_*lou 12
经验法则是:所有内容都this.props从父母传递给你.所以你用this.props.children错了方法.如果我有这样的事情:
<Todos><div /><div /></Todos>
Run Code Online (Sandbox Code Playgroud)
然后,对于Todos组件,this.props.children将是数组divs.
你想要的是简单的回调(工作示例):
/** @jsx React.DOM */
var ResistanceCalculator = React.createClass({
getInitialState: function() {
return {bands: [0,0,0,0,0]};
},
handleBandSelectionChange: function(bandIndex, newValue) {
// for the sake of immutability, clone the array here
var bands = this.state.bands.slice(0);
bands[bandIndex] = newValue;
console.log(bandIndex, newValue); // yep, seems to work
this.setState({bands: bands});
},
render: function() {
return (
<div>
<OhmageIndicator bands={this.state.bands} />
{
this.state.bands.map(function(value, i) {
return (
<BandSelector band={i} onChange={this.handleBandSelectionChange}/>
);
}, this)
}
</div>
);
}
});
var BandSelector = React.createClass({
handleChange: function(e) {
if (this.props.onChange)
this.props.onChange(this.props.band, e.target.value);
},
render: function() {
return (
<select onChange={this.handleChange}>
<option value="1">1</option>
<option value="2">2</option>
</select>
);
}
});
Run Code Online (Sandbox Code Playgroud)
我onChange从select中听到常规事件,然后在处理程序中我调用父亲的handler(handleBandSelectionChange).请注意,对于parent(ResistanceCalculator),事件不必是onChange; 它可以是任何名称,只要孩子称之为.命名它更好onChange.
作为旁注,this.props.children用于希望在自己完成某些工作时透明地呈现其内容的包装器组件.
| 归档时间: |
|
| 查看次数: |
11436 次 |
| 最近记录: |