state 和 props 主要的區別在于 props 是不可變的,而 state 可以根據與用戶互動來改變,
通過組件類的 defaultProps 屬性為 props 設定默認值
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
class Name extends React.Component{
render(){
return(
<div>{this.props.name}</div>
)
}
}
Name.defaultProps={
name:'cyy'
}
ReactDOM.render(
<div>
<Name/>
</div>,
document.getElementById('example')
);
serviceWorker.unregister();
如何在應用中組合使用 state 和 props :
可以在父組件中設定 state, 并通過 props 將其傳遞到子組件上
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
// 父組件通過state設定資料
class Parent extends React.Component{
constructor(props){
super(props);
this.state={
name:'cyy'
}
}
render(){
return(
<Child name={this.state.name}/>
)
}
}
// 子組件通過props接收引數
class Child extends React.Component{
render(){
return(
<div>{this.props.name}</div>
)
}
}
ReactDOM.render(
<div>
<Parent/>
</div>,
document.getElementById('example')
);
serviceWorker.unregister();

Props 驗證
React.PropTypes 在 React v15.5 版本后已經移到了 prop-types 庫,
首先引入React.PropTypes

然后設定驗證

更多驗證器說明如下
MyComponent.propTypes = { // 可以宣告 prop 為指定的 JS 基本資料型別,默認情況,這些資料是可選的 optionalArray: React.PropTypes.array, optionalBool: React.PropTypes.bool, optionalFunc: React.PropTypes.func, optionalNumber: React.PropTypes.number, optionalObject: React.PropTypes.object, optionalString: React.PropTypes.string, // 可以被渲染的物件 numbers, strings, elements 或 array optionalNode: React.PropTypes.node, // React 元素 optionalElement: React.PropTypes.element, // 用 JS 的 instanceof 運算子宣告 prop 為類的實體, optionalMessage: React.PropTypes.instanceOf(Message), // 用 enum 來限制 prop 只接受指定的值, optionalEnum: React.PropTypes.oneOf(['News', 'Photos']), // 可以是多個物件型別中的一個 optionalUnion: React.PropTypes.oneOfType([ React.PropTypes.string, React.PropTypes.number, React.PropTypes.instanceOf(Message) ]), // 指定型別組成的陣列 optionalArrayOf: React.PropTypes.arrayOf(React.PropTypes.number), // 指定型別的屬性構成的物件 optionalObjectOf: React.PropTypes.objectOf(React.PropTypes.number), // 特定 shape 引數的物件 optionalObjectWithShape: React.PropTypes.shape({ color: React.PropTypes.string, fontSize: React.PropTypes.number }), // 任意型別加上 `isRequired` 來使 prop 不可空, requiredFunc: React.PropTypes.func.isRequired, // 不可空的任意型別 requiredAny: React.PropTypes.any.isRequired, // 自定義驗證器,如果驗證失敗需要回傳一個 Error 物件,不要直接使用 `console.warn` 或拋例外,因為這樣 `oneOfType` 會失效, customProp: function(props, propName, componentName) { if (!/matchme/.test(props[propName])) { return new Error('Validation failed!'); } } } }
很多情況下,子控制元件需要父控制元件所有的 props 引數,這個時候我們一個一個引數的寫會很麻煩,比如:
<Name name={this.props.name} url={this.props.url} .../>
那么我們怎么樣把父屬性直接賦值給子組件的props引數呢?如下寫法即可:
<Name props={this.props}/>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/124771.html
標籤:JavaScript
下一篇:React 事件處理簡單演示
