我有以下代碼:綁定(本)在ReactJS和的onChange更新狀態
index.js
class App extends React.Component {
constructor() {
super();
this.state = {
homeLink: "Home"
};
}
onGreet() {
alert("Hello!");
}
onChangeLinkName(newName) {
this.setState({
homeLink: newName
});
}
render() {
return (
<div className="container">
<div className="row">
<div className="col-xs-10 col-xs-offset-1">
<Header homeLink={this.state.homeLink}/>
</div>
</div>
<div className="row">
<div className="col-xs-10 col-xs-offset-1">
<Home
name={"Max"}
initialAge={27}
greet={this.onGreet}
changeLink={this.onChangeLinkName.bind(this)}
initialLinkName={this.state.homeLink}
/>
</div>
</div>
</div>
);
}
}
而且 Home.js
export class Home extends React.Component {
constructor(props) {
super();
this.state = {
age: props.initialAge,
status: 0,
homeLink: props.initialLinkName
};
}
onMakeOlder() {
this.setState({
age: this.state.age + 3
});
}
onChangeLink() {
this.props.changeLink(this.state.homeLink);
}
onHandleChange(event) {
this.setState({
homeLink: event.target.value
});
}
render() {
return (
<div>
<p>In a new Component!</p>
<p>Your name is {this.props.name}, your age is {this.state.age}</p>
<p>Status: {this.state.status}</p>
<hr/>
<button onClick={() => this.onMakeOlder()} className="btn btn-primary">Make me older!</button>
<hr/>
<button onClick={this.props.greet} className="btn btn-primary">Greet</button>
<hr/>
<input type="text" value ={this.state.homeLink}
onChange={(event) => this.onHandleChange(event)}/>
<button onClick={this.onChangeLink.bind(this)} className="btn btn-primary">Change Header Link</button>
</div>
);
}
}
將onChange
在當我在input
字段中寫入內容並更新至state
時,會立即觸發input
標記?當我在input
字段中寫入內容時,我看不到Chrome中React Developer Tool
擴展名中的state
更改。
當我點擊按鈕this.onChangeLink
它會觸發onChangeLink
函數。 onChangeLink
似乎沒有任何爭論,因爲這些籃框是空的,我仍然能夠通過this.state.homeLink
到this.props.changeLink
在onChangeLink
函數中。 this.props.changeLink
這也是index.js
中的函數,其參數爲newName
。我猜這是bind(this)
的問題。bind(this)
是做什麼的?我可以使用胖箭頭功能(event) => this.onChangeLink(event)
來重寫嗎?
是的,你絕對可以有一個箭頭的功能代表它,箭頭功能確實爲你綁定,你也可以只寫爲'的onChange = {this.handleChange}',並進一步表示handlechange函數爲''handleChange =(e)=> {...}'這裏'this'自動綁定 – aditya