91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

React?Props的原理是什么

發布時間:2022-01-17 14:45:41 來源:億速云 閱讀:177 作者:柒染 欄目:開發技術

本篇文章為大家展示了React Props的原理是什么,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

    props理解

    props 是 React 組件通信最重要的手段

    props:對于在 React 應用中寫的子組件,父組件綁定在它們標簽里的 屬性和方法,最終會變成 props 傳遞給它們。

    1)props 可以是:

    • ① props 作為一個子組件渲染數據源。

    • ② props 作為一個通知父組件的回調函數。

    • ③ props 作為一個單純的組件傳遞。

    • ④ props 作為渲染函數。

    • ⑤ render props , 和④的區別是放在了 children 屬性上。

    • ⑥ render component 插槽組件。

    /* children 組件 */
    function ChidrenComponent(){
        return <div> In this chapter, let's learn about react props ! </div>
    }
    /* props 接受處理 */
    class PropsComponent extends React.Component{
        componentDidMount(){
            console.log(this,'_this')
        }
        render(){
            const {  children , mes , renderName , say ,Component } = this.props
            const renderFunction = children[0]
            const renderComponent = children[1]
            /* 對于子組件,不同的props是怎么被處理 */
            return <div>
                { renderFunction() }
                { mes }
                { renderName() }
                { renderComponent }
                <Component />
                <button onClick={ () => say() } > change content </button>
            </div>
        }
    }
    /* props 定義綁定 */
    class Index extends React.Component{
        state={  
            mes: "hello,React"
        }
        node = null
        say= () =>  this.setState({ mes:'let us learn React!' })
        render(){
            return <div>
                <PropsComponent  
                   mes={this.state.mes}  // ① props 作為一個渲染數據源
                   say={ this.say  }     // ② props 作為一個回調函數 callback
                   Component={ ChidrenComponent } // ③ props 作為一個組件
                   renderName={ ()=><div> my name is alien </div> } // ④ props 作為渲染函數
                >
                    { ()=> <div>hello,world</div>  } { /* ⑤render props */ }
                    <ChidrenComponent />             { /* ⑥render component */ }
                </PropsComponent>
            </div>
        }
    }

    2)props在React充當角色(3個角度):

    ① 組件層級

    •  父傳子:props 和 子傳父:props 的 callback

    • 將視圖容器作為 props 進行渲染

    ② 更新機制

    在 fiber 調和階段中,diff 可以說是 React 更新的驅動器,props 可以作為組件是否更新的重要準則

    (PureComponentmemo 等性能優化方案)

    ③ 插槽層面

    組件的閉合標簽里的插槽,轉化成 chidren 屬性

    3)監聽props改變:

    類組件: componentWillReceiveProps(廢棄) componentWillReceiveProps(新)函數組件: useEffect (初始化會默認執行一次) props chidren模式

    ① props 插槽組件

    <Container>
        <Children>
    </Container>

    在 Container 組件中,通過 props.children 屬性訪問到 Chidren 組件,為 React element 對象。

    作用:

    • 可以根據需要控制 Chidren 是否渲染。

    • Container 可以用 React.cloneElement 強化 props (混入新的 props ),或者修改 Chidren 的子元素。

    ② render props模式

    <Container>
       { (ContainerProps)=> <Children {...ContainerProps}  /> }
    </Container>
    ————————————————————————————————————————————————————————————————————————————————
    Container組件:
    function  Container(props) {
        const  ContainerProps = {
            name: 'alien',
            mes:'let us learn react'
        }
         return  props.children(ContainerProps)
    }

    根據需要控制 Chidren 渲染與否。可以將需要傳給 Children 的 props 直接通過函數參數的方式傳遞給執行函數 children 。

    操作 props

    1、抽象 props

    用于跨層級傳遞 props ,一般不需要具體指出 props 中某個屬性,而是將 props 直接傳入或者是抽離到子組件中。

    1)混入 props

    給父組件 props 中混入某個屬性,再傳遞給子組件

    function Son(props){
        console.log(props)
        return <div> hello,world </div>
    }
    function Father(props){
        const fatherProps={
            mes:'let us learn React !'
        }
        return <Son {...props} { ...fatherProps }  />
    }
    function Index(){
        const indexProps = {
            name:'alien',
            age:'28',
        }
        return <Father { ...indexProps }  />
    }
    2)抽離 props

    從父組件 props 中抽離某個屬性,再傳遞給子組件

    function Son(props){
        console.log(props)
        return <div> hello,world </div>
    }
    function Father(props){
        const { age,...fatherProps  } = props
        return <Son  { ...fatherProps }  />
    }
    function Index(){
        const indexProps = {
            age:'28',
            mes:'let us learn React !'
        }
        return <Father { ...indexProps }  />
    }

    2、注入 props

    1)顯式注入 props

    能夠直觀看見標簽中綁定的 props

    function Son(props){
        console.log(props)
        return <div> hello,world </div>
    }
    function Father(props){
        const fatherProps={
            mes:'let us learn React !'
        }
        return <Son {...props} { ...fatherProps }  />
    }
    function Index(){
        const indexProps = {
            name:'alien',
            age:'28',
        }
        return <Father { ...indexProps }  />
    }
    2)隱式注入 props

    一般通過 React.cloneElement 對 props.chidren 克隆再混入新的 props

    function Son(props){
         console.log(props) // {name: "alien", age: "28", mes: "let us learn React !"}
         return <div> hello,world </div>
    }
    function Father(prop){
        return React.cloneElement(prop.children,{  mes:'let us learn React !' })
    }
    function Index(){
        return <Father>
            <Son  name="alien"  age="28"  />
        </Father>
    }

    上述內容就是React Props的原理是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    齐齐哈尔市| 涟水县| 鹤岗市| 广汉市| 阿拉善左旗| 瓦房店市| 温宿县| 辰溪县| 宁波市| 武宣县| 阿鲁科尔沁旗| 嫩江县| 诸城市| 红桥区| 朝阳县| 永定县| 高唐县| 临邑县| 富裕县| 长乐市| 卓资县| 扎鲁特旗| 翁牛特旗| 丰原市| 同仁县| 永嘉县| 玛多县| 罗江县| 邵东县| 武义县| 彭阳县| 新化县| 贡山| 德清县| 巴中市| 南城县| 嘉鱼县| 凤冈县| 河东区| 阿城市| 什邡市|