如標題所說,在很多情況下,props裡面的參數都會有空值的問題,而props如果沒特別去設定的話,他回傳的值就是空值,這時候就會有需求,會需要設定預設值。
以前一章的實例來寫
class App2 extends Component {
render() {
return (
<div>
<img src={logo} className="App-logo" alt="logo" />
<p>
{this.props.text}<br />
<Hi text1={this.props.text1} text2={this.props.text2} text3={this.props.text3} />
</p>
</div>
)
}
}
class Hi extends Component {
render() {
return (
<React.StrictMode>
<span>{this.props.text1}</span>
<span>{this.props.text2}</span>
<span>{this.props.text3}</span>
</React.StrictMode>
)
}
}
export default class App extends Component {
render() {
return (
<div className="App">
<header className="App-header">
<App2 text="你好 React"/>
</header>
</div>
)
}
}
這邊改了一些,用<React.StrictMode>來當Hi的最外層,這樣HTML看起來比較乾淨,用DIV也可以不影響的。
我將
<App2 text="你好 React" text1="text1" text2="text2" text3="text3"/>
改成
<App2 text="你好 React"/>
輸出畫面
設定預設值有2種方式
方法一 寫在組件裡面
class Hi extends Component {
static defaultProps = {
text1: '你沒參數1',
text2: '你沒參數2',
text3: '你沒參數3',
}
render() {
return (
<React.StrictMode>
<span>{this.props.text1}</span>
<span>{this.props.text2}</span>
<span>{this.props.text3}</span>
</React.StrictMode>
)
}
}
方法二 也可以寫在組件外面
class Hi extends Component {
render() {
return (
<React.StrictMode>
<span>{this.props.text1}</span>
<span>{this.props.text2}</span>
<span>{this.props.text3}</span>
</React.StrictMode>
)
}
}
Hi.defaultProps = {
text1: '你沒參數1',
text2: '你沒參數2',
text3: '你沒參數3',
};
2個都一樣依需求使用