日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

react組件實(shí)例屬性props實(shí)例詳解_React

作者:K-L ? 更新時(shí)間: 2023-03-26 編程語(yǔ)言

react組件實(shí)例屬性props

props

props簡(jiǎn)單使用

   class Person extends React.Component {
            render() {
                return (
                    <ul>
                        <li>姓名:{this.props.name}</li>
                        <li>年齡:{this.props.age}</li>
                        <li>性別:{this.props.sex}</li>
                    </ul>
                )
            }
        }
        const root = ReactDOM.createRoot(document.getElementById('test'));
        // 這里props屬性要寫(xiě)成key:"value"形式,但是會(huì)默認(rèn)將value視為字符串,若想傳遞js類型的字面量,則要加{}
        root.render(<Person name="kl" age={19} sex="男" />);

props批量操作

 class Person extends React.Component {
            render() {
                return (
                    <ul>
                        <li>姓名:{this.props.name}</li>
                        <li>年齡:{this.props.age}</li>
                        <li>性別:{this.props.sex}</li>
                    </ul>
                )
            }
        }
        const root = ReactDOM.createRoot(document.getElementById('test'));
        const p = { name: "lml", sex: "nan", age: 18 }
        root.render(<Person {...p} />);

props屬性類型限制

需要導(dǎo)入prop-type

https://unpkg.com/prop-types@15.6/prop-types.js

 class Person extends React.Component {
            render() {
                return (
                    <ul>
                        <li>姓名:{this.props.name}</li>
                        <li>年齡:{this.props.age + 1}</li>
                        <li>性別:{this.props.sex}</li>
                    </ul>
                )
            }
        }
        // 對(duì)props限制
        Person.propTypes = {
            name: PropTypes.string.isRequired,
            sex: PropTypes.string,
            age: PropTypes.number,
            speak: PropTypes.func, // 限制為函數(shù)
        }
        // props默認(rèn)值
        Person.defaultProps = {
            sex: '不男不女',
            age: 18,
        }
        function speak() {
            console.log('說(shuō)話了');
        }
        const root = ReactDOM.createRoot(document.getElementById('test'));
        // 這里props屬性要寫(xiě)成key:"value"形式,但是會(huì)默認(rèn)將value視為字符串,若想傳遞js類型的字面量,則要加{}
        root.render(<Person name="lml" age={19} speak={speak} />);

props屬性限制的簡(jiǎn)寫(xiě)

class Person extends React.Component {
            // 對(duì)props限制
            static propTypes = {
                name: PropTypes.string.isRequired,
                sex: PropTypes.string,
                age: PropTypes.number,
                speak: PropTypes.func, // 限制為函數(shù)
            }
            // props默認(rèn)值
            static defaultProps = {
                sex: '不男不女',
                age: 18,
            }
 
            render() {
                return (
                    <ul>
                        <li>姓名:{this.props.name}</li>
                        <li>年齡:{this.props.age + 1}</li>
                        <li>性別:{this.props.sex}</li>
                    </ul>
                )
            }
        }
 
        const root = ReactDOM.createRoot(document.getElementById('test'));
 
        root.render(<Person name="lml" age={19} />);

函數(shù)組件使用props

function People(props) {
            return (
                <ul>
                    <li>name:{props.name}</li>
                    <li>age:{props.age}</li>
                </ul>
            )
        }
        const root = ReactDOM.createRoot(document.getElementById('test'));
 
        root.render(<People name="lml" age={19} />);

補(bǔ)充:React之組件實(shí)例的三大屬性之props

props

每個(gè)組件對(duì)象都會(huì)有props(properties的簡(jiǎn)寫(xiě))屬性
組件標(biāo)簽的所有屬性都保存在props中
通過(guò)標(biāo)簽屬性從組件外向組件內(nèi)傳遞變化的數(shù)據(jù),組件內(nèi)不能夠修改props數(shù)據(jù)

實(shí)例

做一個(gè)能夠展示姓名、學(xué)號(hào)、性別的列表組件,并且能夠設(shè)置默認(rèn)值。
這里就需要用到之前沒(méi)用到的prop-types.js了
為了防止react太笨重,就將限制類型的模塊單獨(dú)抽了出來(lái),方便選擇是否使用,需要使用導(dǎo)入即可。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="test1"></div>
    <div id="test2"></div>
    <div id="test3"></div>
    <div id="test4"></div>
    <script src="../js/react.development.js"></script>
    <script src="../js/react-dom.development.js"></script>
    <script src="../js/babel.min.js"></script>
    <script src="../js/prop-types.js"></script>
    <script type="text/babel">
        class Person extends React.Component {
        //對(duì)標(biāo)簽屬性進(jìn)行類型、必要性的限制
        static propTypes = {
            name:PropTypes.string.isRequired, //限制name必傳,且為字符串
            sex:PropTypes.string,
            age:PropTypes.number, //限制為數(shù)字
            speak:PropTypes.func //限制為函數(shù)
        }
        //指定模標(biāo)簽屬性值
        static defaultProps ={
            sex:"男",
            age:18
        }
        
        render() {
                //props只讀不能改
                const {name, age, gender} = this.props
                return (
                    <ul>
                        <li>{name}</li>
                        <li>{age}</li>
                        <li>{gender}</li>
                    </ul>
                )
            }
        }

        ReactDOM.render(<Person name="tom" age={19} gender="男"/>, document.getElementById("test1"))
        ReactDOM.render(<Person name="pretty" gender="女"/>, document.getElementById("test2"))
        ReactDOM.render(<Person name="hunter" age={21} gender="男"/>, document.getElementById("test3"))

        const p = {name:"AABB", age:19, gender:"UNK"}
        //展開(kāi)運(yùn)算符
        ReactDOM.render(<Person {...p}/>, document.getElementById("test4"))
        function speak(){
            console.log("speaking...")
        }
    </script>
</body>
</html>

前言萬(wàn)語(yǔ)都在注釋里,運(yùn)行結(jié)果:

在這里插入圖片描述

如果我們將AABB的age改成字符型

const p = {name:"AABB", age:"19", gender:"UNK"}

那么結(jié)果如下:

在這里插入圖片描述

會(huì)警告數(shù)據(jù)類型錯(cuò)誤,達(dá)到限制數(shù)據(jù)類型的提示。

原文鏈接:https://www.cnblogs.com/ucbb/archive/2023/01/29/17073870.html

欄目分類
最近更新