[React]屬性和狀態
屬性和含義和用法(props)
三種賦值方法
1.
var style = {
color: "red",
border: "1px solid #000",
};
var HelloWorld = React.createClass({
render: function () {
return <p>Hello, {this.props.name ? this.props.name : "World"}</p>;
}
});
var HelloUniverse = React.createClass({
getInitialState: function () {
return {name: ''};
},
handleChange: function (event) {
this.setState({name: event.target.value});
},
render: function () {
return <div>
<HelloWorld name={this.state.name}></HelloWorld>
<br/>
<input type="text" onChange={this.handleChange}/>
</div>
}
});
ReactDOM.render(
<div style={style}><HelloUniverse></HelloUniverse></div>
, document.body)
2.
var style = {
color: "red",
border: "1px solid #000",
};
var HelloWorld = React.createClass({
render: function () {
return <p>Hello, {this.props.name1 + ' ' + this.props.name2}</p>;
}
});
var HelloUniverse = React.createClass({
getInitialState: function () {
return {
name1: 'Tim',
name2: 'John'
};
},
handleChange: function (event) {
this.setState({name1: event.target.value});
},
render: function () {
return <div>
<HelloWorld {...this.state}></HelloWorld>
<br/>
<input type="text" onChange={this.handleChange}/>
</div>
}
});
ReactDOM.render(
<div style={style}><HelloUniverse></HelloUniverse></div>
, document.body)
3.setProps形式:通過元件更新屬性,不能在元件內部中修改屬性的,因為會違背元件設計原則(儘量避免)
var HelloWorld = React.createClass({
render: function(){
return <p>Hello, {this.props.name}</p>
}
});
var instance = ReactDOM.render(<HelloWorld></HelloWorld>, document.body);
instance.setProps({name: 'wilcohuang'});
狀態的含義和用法(state)
- getInitialState: 初始化每個例項特有和居狀態
- setState: 更新元件狀態,setState->diff演算法->(如果有變化)->更新DOM
屬性和狀態對比
相同點:
- 都是純JS物件
- 都會觸發render更新
- 都具有確定性
- | 屬性 | 狀態 |
---|---|---|
能否從父元件獲取初始值 | yes | no |
能否由父元件修改 | yes | no |
能否在元件內部設定預設值 | yes | yes |
能否在元件內部修改 | no | yes |
能否設定子元件的初始值 | yes | no |
能否修改子元件的值 | yes | no |
元件在執行時需要修改的資料就要狀態。
屬性和狀態實戰
- 分析構成專案的元件
- 分析元件的關係及資料傳遞
- 實際編寫程式碼
var Content = React.createClass({
render: function () {
return <p>{this.props.selectName}</p>;
},
});
var Comment = React.createClass({
getInitialState: function () {
return {
names: ['Tim', 'John', 'Hank'],
selectName: '',
};
},
handleSelect: function () {
this.setState({selectName: event.target.value});
},
render: function () {
var options = [];
for (var option in this.state.names) {
options.push(<option value={this.state.names[option]}>{this.state.names[option]}</option>);
}
return <div>
<select onChange={this.handleSelect}>
{options}
</select>
<Content selectName={this.state.selectName}></Content>
</div>;
},
});
ReactDOM.render(<Comment></Comment>, document.body);
var Content = React.createClass({
getInitialState: function () {
return {
// text: "reply To: " + this.props.selectName, //寫在這裡是錯誤的,getInitialState相當於建構函式,如果selectName改變,這裡不能更新
inputText: "",
};
},
handleChange: function (event) {
this.setState({inputText: event.target.value});
},
handleSubmit: function () {
console.log('reply to ' + this.props.selectName + "\n" + this.state.inputText);
},
render: function () {
return <div>
<textarea onChange={this.handleChange} placeholder="please enter something..."></textarea>
<button onClick={this.handleSubmit}>submit</button>
</div>;
},
});
var Comment = React.createClass({
getInitialState: function () {
return {
names: ['Tim', 'John', 'Hank'],
selectName: '',
};
},
handleSelect: function () {
this.setState({selectName: event.target.value});
},
render: function () {
var options = [];
for (var option in this.state.names) {
options.push(<option value={this.state.names[option]}>{this.state.names[option]}</option>);
}
return <div>
<select onChange={this.handleSelect}>
{options}
</select>
<Content selectName={this.state.selectName}></Content>
</div>;
},
});
ReactDOM.render(<Comment></Comment>, document.body);
相關文章
- React Native 探索(三)元件的 Props (屬性) 和 State (狀態)React Native元件
- React原始碼分析與實現(二):狀態、屬性更新 -> setStateReact原始碼
- JavaScript私有屬性和靜態屬性JavaScript
- 狀態管理庫MobX和reactReact
- 狀態管理庫 MobX 和 reactReact
- React 元件屬性React元件
- PHP動態屬性和stdclassPHP
- 深入解析React props和state屬性React
- react 元件的屬性React元件
- React學習手記2-屬性校驗和預設屬性React
- 類的靜態屬性和方法
- SCSS 巢狀屬性CSS巢狀
- Sku 多維屬性狀態判斷演算法演算法
- React 狀態管理:狀態與生命週期React
- React的狀態管理React
- react 狀態機管理React
- 深入理解JavaScript類與物件:揭秘類欄位和靜態屬性的妙用,js靜態屬性和例項屬性JavaScript物件JS
- 靜態屬性
- <react學習筆記(3)>屬性與狀態以及元件的生命週期(初始化階段)React筆記元件
- React屬性用法總結React
- React之props屬性React
- <react學習筆記(6)>知識點回顧(2)事件繫結及傳參,元件,屬性和狀態,表單元素React筆記事件元件
- [二、狀態管理]2管理元件擁有的狀態(5)@Observed裝飾器和@ObjectLink裝飾器:巢狀類物件屬性變化元件Object巢狀物件
- react之redux狀態管理ReactRedux
- defer 屬性和 async 屬性
- JavaScript物件的的建立及屬性狀態維護詳解JavaScript物件
- React - Context API 維護全域性狀態,實現全域性元件通訊ReactContextAPI元件
- SAP 電商雲 Spartacus UI 有狀態 的 url 和 title 屬性的賦值程式碼UI賦值
- React專題:不可變屬性React
- PHP 中 static 靜態屬性和靜態方法的呼叫PHP
- react、JSX編譯原理、生命週期、屬性、狀態改變、建立元件、複合元件間的資訊傳遞、受控和非受控元件、react腳手架ReactJS編譯原理元件
- React 4 種狀態型別及 N 種狀態管理React型別
- React狀態管理之ContextReactContext
- 新的React狀態庫:focaReact
- React專題:可變狀態React
- React hooks 狀態管理方案解析ReactHook
- React 路由狀態管理總結React路由
- JS/JQ動態建立(新增)optgroup和option屬性JS