這部分是我覺得最難理解的區塊,透過父傳子的概念可以將手上的資料活用到什麼程度?也可以將目前所擁有的state做什麼改變?
this.props.prop-Name
取得從父層傳遞來的值在使用function與ES6的語法時,getDefaultProps()
會被定義到Component上的一個屬性
class Amazing extends React.Component {
// ...
}
Amazing.defaultProps = {
name: 'Mary'
};
//定義到name上
定義:Dynamic information 可以改變的資料
有兩種方式可以拿到component中變動的資料:prop、state
prop vs. state 不同處
prop 在component 外部定義
state 在component內部定義
?寫法:
class Example extends React.Component {
constructor(props) {
super(props);
this.state = { mood: 'decent' };
}
render() {
return <div></div>;
}
}
<Example />
第四行 this.state 需要等於一個物件
constructor、super是ES6的寫法,不單單只是寫在React中
在React component 中constructors在建立時,會使用『super』,不然會出錯!
import React from 'react';
import ReactDOM from 'react-dom';
const green = '#39D1B4';
const yellow = '#FFD712';
class Toggle extends React.Component {
constructor(props){
super(props);
this.state = { color: green };
this.changeColor = this.changeColor.bind(this);
}
changeColor() {
const newColor = this.state.color == green ? yellow : green;
this.setState({ color: newColor });
}
render() {
return (
<div style={{background: this.state.color}}>
<h1>
Change my color
</h1>
<button onClick={this.changeColor}>
Change color
</button>
</div>
);
}
}
ReactDOM.render(<Toggle />, document.getElementById('app'));
this.setState({ color: newColor });
每當調用 this.setState() 時,一旦狀態發生變化,this.setState() 就會自動調用 .render()。
所以,setState(),==不可以==呼叫render()中的函數,否則會造成infinite loop ➰
class BadComponent extends React.Component {
constructor(props) {
super(props);
this.count = 0;
}
render() {
// Don't do this! This is bad!
this.setState({ count: this.state.count + 1 });
return <div>The count is {this.state.count}</div>;
}
}
<仍有資料尚未整理完整,盡快補齊~>