日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

React類組件是通過創(chuàng)建 class 繼承 React.Component創(chuàng)建的。類組件中通過render函數(shù)返回react元素。react組件的三大核心屬性是建立在react的類組件基礎(chǔ)上的,即:state、props、refs。

一、state

概念

state是組件對象最重要的屬性,值是對象(可以包含多個key:value的組合),組件被稱為"狀態(tài)機",通過更新組件的state來更新對應(yīng)的頁面顯示(重新渲染組件),有state稱為復雜組件。

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8" />

<title>State</title>

<!-- 引入react核心庫 -->

<script src="https://cdn.bootcdn.NET/ajax/libs/react/18.2.0/umd/react.development.js"></script>

<!-- 引入操作dom的擴展庫 -->

<script src="https://cdn.bootcdn.net/ajax/libs/react-dom/18.2.0/umd/react-dom.development.js"></script>

<!-- 引入babel來解析jsx語法 -->

<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>

</head>

<body>

<div id="App"></div>

<script type="text/babel">

class Content extends React.Component {

//state:定義當前組件內(nèi)部的狀態(tài),狀態(tài)是當前組件私有的

state = {

content: "React真好用",

count: 0,

isHot: true,

};

render() {

const { content, isHot, count } = this.state;

return (

<div>

<h1>State</h1>

<p>{content}</p>

<p>{count}</p>

<p>{isHot ? "熱啊" : "冷啊"}</p>

</div>

);

}

}

const root = ReactDOM.createRoot(document.getElementById("app"));

root.render(<Content />);

</script>

</body>

</html>

執(zhí)行結(jié)果如下:

如何修改state的值

  • 不可以直接通過this.state.xxx=xxx的方式修改state對象的內(nèi)容。
  • 修改state一定要調(diào)用setState這個方法去修改。
  • 使用語法:setState({key:value})。
  • setState做了兩件事:1. 改變state 2. 重新調(diào)用了一次render。

<div id="app"></div>

<script type="text/babel">

class Demo extends React.Component {

state = {

isHot: true,

};

render() {

const { isHot } = this.state;

return (

<div>

<p>今天天氣很{isHot ? "很熱" : "涼快"}</p>

<button onClick={this.changeWea}>修改天氣</button>

</div>

);

}

/*

state不能直接修改,需要使用組件實例的setState方法

setState接受的參數(shù)是一個對象,將來會合并給原有的state中

*/

changeWea = () => {

const { isHot } = this.state;

// this.state.isHot = false; XXX

this.setState({ isHot: !isHot });

};

}

const root = ReactDOM.createRoot(document.getElementById("app"));

root.render(<Demo />);

</script>

執(zhí)行結(jié)果如下:

二、props

概念

  • props就是組件定義屬性的集合,它是組件對外的接口,由外部通過JSX屬性傳入設(shè)置(也就是從外部傳遞給內(nèi)部組件的數(shù)據(jù))。
  • 每個組件對象都會有props(properties的簡寫)屬性。
  • 組件標簽的所有屬性都保存在props中。

作用

1.通過標簽屬性從組件外向組件內(nèi)傳遞變化的數(shù)據(jù),外部世界(組件)就是通過prop來和組件進行對話數(shù)據(jù)傳遞的。

2.組件內(nèi)部不要修改props數(shù)據(jù),props是只讀的。

<script type='text/babel'>

class Myself extends React.Component{

render(){

console.log(this.props);

let {name,age,sex} = this.props.mes

//如果真的要修改props 則可以解構(gòu)出來某個屬性 然后對變量進行修改

name+="~"

return (

<ul>

<li>姓名是{name}</li>

<li>性別是{sex}</li>

<li>年齡是{age}</li>

</ul>

}

}

class App extends React.Component{

state = {

persons:[

{name:"laowang",age:19,sex:"man"},

{name:"laoli",age:29,sex:"man"},

{name:"laowan",age:12,sex:"woman"},

]

}

render(){

console.log(this);

const {persons} = this.state;

return (

<div>

{

persons.map((item,index)=>{

return <Myself mes={item} key={index}/>

})

}

</div>

}

}

const root = ReactDOM.createRoot(document.getElementById("app"));

root.render(<App />);

</script>

批量傳遞props

當需要把一個對象內(nèi)所有的key-value都傳遞到組件中,可以使用批量傳遞。比如一個對象obj,我們可以在傳遞props的時候直接書寫為{...obj}即可。當然,我們可以傳遞額外的props來添加和修改批量傳遞的內(nèi)容。

return (

<div>

{

persons.map((item,index)=>{

// return <Myself name={item.name} sex={item.sex} age={item.age} key={index}/>

//{...o}在jsx中書寫時,可以展開對象為key-value(jsx+react實現(xiàn)的 不是js語法)

return <Myself {...item} key={index}/>

})

}

</div>

執(zhí)行結(jié)果如下:

配置props限制

1.引入react的propType.js第三方包。

<!-- 對props中數(shù)據(jù)類型進行檢測及限制 -->

<script src="https://cdn.bootcdn.net/ajax/libs/prop-types/15.8.1/prop-types.js"></script>

2.prop-types的主要作用:對props中數(shù)據(jù)類型進行檢測及限制

3.propType的使用:

  • 給組件擴展靜態(tài)屬性propTypes,值是一個對象。
  • key就是被限制的props屬性。
  • value值的寫法:可以限制值的數(shù)據(jù)類型(number、string、bool、func、object、array等)PropTypes.XXXX;限制特定的內(nèi)容:PropTypes.oneOf(['a', 'b']),值只能是a或者b;也可以在任何 PropTypes 屬性后面加上 isRequired 后綴,這樣如果這個屬性父組件沒有提供時,會打印警告信息。

<script type="text/babel">

class Myself extends React.Component {

render() {

console.log(this.props);

const { name, age, nicknames, address } = this.props;

return (

<div>

<h1>我是:{name}</h1>

<p>我今年:{age}歲</p>

<ul>

{nicknames.map((item, index) => {

return <li key={index}>{item}</li>;

})}

</ul>

<p>我家住在{address}</p>

</div>

);

}

static propTypes = {

name: PropTypes.string.isRequired,

age: PropTypes.number,

nicknames: PropTypes.array,

address: PropTypes.oneOf(["湖北", "湖南"]),

};

}

class App extends React.Component {

render() {

return (

<div>

<Myself

name="李紅"

age={18}

nicknames={["小紅", "lucy", "普羅"]}

address="湖北"

/>

</div>

);

}

}

const root = ReactDOM.createRoot(document.getElementById("app"));

root.render(<App />);

</script>

執(zhí)行結(jié)果如下:

三、refs

概念

Refs 提供了一種方式,允許我們訪問 DOM 節(jié)點或在 render 方法中創(chuàng)建的 React 元素。

ref的字符串方法

只需要在被獲取的DOM上設(shè)置ref屬性 值為一個自定義名稱XXX,在當前組件的其他位置可以通過this.refs.XXX獲取當前DOM。

<script type="text/babel">

class App extends React.Component {

render() {

return (

<div>

<input type="text" ref="oIpt" />

<button onClick={this.showMsg}>點我彈出input中輸入的內(nèi)容</button>

</div>

);

}

showMsg = () => {

console.log(this.refs.oIpt.value);

};

}

const root = ReactDOM.createRoot(document.getElementById("app"));

root.render(<App />);

</script>

執(zhí)行結(jié)果如下:

回調(diào)函數(shù)形式的ref

1.ref屬性的值是一個函數(shù)(箭頭函數(shù))。

2.當讀到ref屬性的時候,react會當內(nèi)部的函數(shù)調(diào)用,并傳遞當前的DOM為實參。

3.把這個接受實參的形參賦值給實例對象的一個屬性,這個屬性就是被獲取的DOM。

<script type="text/babel">

class App extends React.Component {

render() {

console.log(this);

return (

<div>

<input type="text" ref={(c) => (this.oIpt = c)} />

<button onClick={this.showMsg}>點我彈出input中輸入的內(nèi)容</button>

</div>

);

}

showMsg = () => {

console.log(this.oIpt.value);

};

}

const root = ReactDOM.createRoot(document.getElementById("app"));

root.render(<App />);

</script>

createRef的使用

1.首先使用React.createRef()方法創(chuàng)建一個容器。

2.把這個容器給到被獲取的DOM節(jié)點的ref屬性上。

3.通過this.容器.current獲取到當前的DOM。

<script type="text/babel">

class App extends React.Component {

//設(shè)置一個ref的容器

oIpt = React.createRef();

render() {

console.log(this);

return (

<div>

<input type="text" ref={this.oIpt} />

<button onClick={this.showMsg}>點我彈出input中輸入的內(nèi)容</button>

</div>

);

}

showMsg = () => {

alert(this.oIpt.current.value);

};

}

const root = ReactDOM.createRoot(document.getElementById("app"));

root.render(<App />);

</script>

總結(jié)

以上就是對react組件對象的三大核心屬性的一個簡單的演示。

簡單的理解state就是狀態(tài),保存狀態(tài)數(shù)據(jù)的屬性,用來拿到狀態(tài)數(shù)據(jù)對界面進行渲染,因為state是響應(yīng)式的,所以向state中存放狀態(tài)數(shù)據(jù)時需要使用setState方法進行更改,react會重新調(diào)用render函數(shù)進行渲染。

而props就可以理解為標簽中的屬性,通過props就可以讀取組件外向組件內(nèi)傳遞的數(shù)據(jù)。

refs就是組件用來標識自己的一個標志,通過這個屬性就可以拿到標簽的信息,比如value,但注意,字符串形式的ref官方已經(jīng)不建議使用它,因為 string 類型的 refs 已過時并可能會在未來的版本被移除。

分享到:
標簽:React
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定