最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React高階組件優(yōu)化文件結(jié)構(gòu)流程詳解

 更新時間:2023年01月29日 15:46:05   作者:-耿瑞-  
高階組件就是接受一個組件作為參數(shù)并返回一個新組件(功能增強的組件)的函數(shù)。這里需要注意高階組件是一個函數(shù),并不是組件,這一點一定要注意,本文給大家分享React 高階組件HOC使用小結(jié),一起看看吧

其實高階組件是一個將組件寫的更靈活的方式,他的應(yīng)用場景在業(yè)務(wù)開發(fā)中會非常多樣

這里 我們演示一種 主要還是解決問題的思想最重要 或者是 這個不叫解決問題 而是設(shè)計組件結(jié)構(gòu)的思路

我們來模擬一個場景

在src下有一個 components 文件夾目錄

在 components 下有一個 banner.jsx組件 參考代碼如下

import React,{ Component } from 'react';
class Banner extends Component {
    constructor() {
        super();
        this.state = {
            loading: true,
            banner: null
        }
    }
    componentDidMount() {
        fetch("http://iwenwiki.com/api/blueberrypai/getIndexBanner.php").then(res =>
        res.json()).then(banner => {
            this.setState({
                loading: false,
                banner: banner
            })
        })
    }
    render() {
        if(this.state.loading) {
            return (
                <div>loading</div>
            )
        } else {
            return (
                <h1> {this.state.banner.banner[0].title }</h1>
            )
        }
    }
}
export default Banner;

然后 在components下有一個 chengpin.jsx組件 參考代碼如下

import React,{ Component } from 'react';
class Chengpin extends Component {
    constructor() {
        super();
        this.state = {
            loading: true,
            chengpin: null
        }
    }
    componentDidMount() {
        fetch("http://iwenwiki.com/api/blueberrypai/getChengpinInfo.php").then(res =>
        res.json()).then(chengpin => {
            this.setState({
                loading: false,
                chengpin: chengpin
            })
        })
    }
    render() {
        if(this.state.loading) {
            return (
                <div>loading</div>
            )
        }else{
            return (
                <h1> {this.state.chengpin.chengpinInfo[0].title}</h1>
            )
        }
    }
}
export default Chengpin;

其實 兩個組件寫的寫法 基本就是一樣的

只是調(diào)用的接口 和使用的字段不一樣而已 像這么相似的東西 我們真的沒必要寫兩個組件來處理 直接一個高階組件就行了

我們先將這兩個組件刪了

然后 我們在components目錄下創(chuàng)建 withFetch.jsx組件

參考代碼如下

import React from 'react'
const withFetch = (url) => (View) => {
    return class extends Component {
        constructor() {
            super();
            this.state = {
                loading: true,
                data: null
            }
        }
        componentDidMount() {
            fetch(url)
            .then(res => res.json())
            then(data => {
                this.setstate({
                    loading: false,
                    data: data
                });
            })
        }
        render() {
            if(this.state.loading) {
                return(
                    <div>loadding....</div>
                )
            }else{
                return <View data={this.state.data }></View>
            }
        }
    }
}
export default withFetch;

這樣 我們的一個高階組件就寫好了 然后 講解一下

我們 方法 第一個參數(shù) 接收一個url參數(shù) 這個參數(shù) 用來控制fetch網(wǎng)絡(luò)請求的地址 也可以理解為控制他去調(diào)哪個接口

然后 第二個參數(shù) 是一個組件

最后 將請求回來的數(shù)據(jù) 給了組件的data參數(shù)

然后 在components下創(chuàng)建 componentTransfer.jsx文件 用于使用高階組件

import React from "react"
import withFetch from "./withFetch"
const Chengpin = withFetch("http://iwenwiki.com/api/blueberrypai/getChengpinInfo.php")(props =>{
    return(
        <div>
            <h1> {props.data.chengpinInfo[0].title}</h1>
        </div>
    )
})
const Banner = withFetch("http://iwenwiki.com/api/blueberrypai/getIndexBanner.php")(props =>{
    return(
        <div>
            <h1>{ props.data.banner[0].title } </h1>
        </div>
    )
})
let data = {
    Chengpin: Chengpin,
    Banner: Banner
}
export default data;

這樣 我們就將 url作為了 參數(shù) 然后 第二個參數(shù) 現(xiàn)寫的 代碼結(jié)構(gòu) 通過接到的 data參數(shù)來處理組件內(nèi)部 然后再傳給高階組件 去渲染

這個寫法就會使我們的多組件項目簡化很多

最后 修改 src目錄下的 App.js 代碼如下

import './App.css';
import React from "react";
import ComponentTransfer from "./components/componentTransfer";
export default class App extends React.Component{
  constructor(props){
    super(props);
    this.state = {
    }
  }
  render(){
    return (
      <div>
          <ComponentTransfer.Chengpin/>
          <ComponentTransfer.Banner/>
      </div>
    )
  }
}

運行結(jié)果如下

大家可以照著寫一次 體會一下這種關(guān)聯(lián)渲染的邏輯 用好了 可以讓你的項目組件布局簡便非常多 組件越多發(fā)揮空間越大

到此這篇關(guān)于React高階組件優(yōu)化文件結(jié)構(gòu)流程詳解的文章就介紹到這了,更多相關(guān)React優(yōu)化文件結(jié)構(gòu)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解react-router4 異步加載路由兩種方法

    詳解react-router4 異步加載路由兩種方法

    本篇文章主要介紹了詳解react-router4 異步加載路由兩種方法 ,具有一定的參考價值,有興趣的可以了解一下
    2017-09-09
  • ReactNative環(huán)境搭建的教程

    ReactNative環(huán)境搭建的教程

    這篇文章主要介紹了ReactNative環(huán)境搭建的教程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Zustand介紹與使用 React狀態(tài)管理工具的解決方案

    Zustand介紹與使用 React狀態(tài)管理工具的解決方案

    本文主要介紹了Zustand,一種基于React的狀態(tài)管理庫,Zustand以簡潔易用、靈活性高及最小化原則等特點脫穎而出,旨在提供簡單而強大的狀態(tài)管理功能
    2024-10-10
  • 使用useMutation和React Query發(fā)布數(shù)據(jù)demo

    使用useMutation和React Query發(fā)布數(shù)據(jù)demo

    這篇文章主要為大家介紹了使用useMutation和React Query發(fā)布數(shù)據(jù)demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • 解決React報錯Property 'X' does not exist on type 'HTMLElement'

    解決React報錯Property 'X' does not 

    這篇文章主要為大家介紹了解決React報錯Property 'X' does not exist on type 'HTMLElement',有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • React中常見的TypeScript定義實戰(zhàn)教程

    React中常見的TypeScript定義實戰(zhàn)教程

    這篇文章主要介紹了React中常見的TypeScript定義實戰(zhàn),本文介紹了Fiber結(jié)構(gòu),F(xiàn)iber的生成過程,調(diào)和過程,以及 render 和 commit 兩大階段,需要的朋友可以參考下
    2022-10-10
  • React?腳手架配置代理完整指南(最新推薦)

    React?腳手架配置代理完整指南(最新推薦)

    本文詳細介紹了React腳手架配置代理的多種方式,文章還討論了常見問題的解決方案,如跨域問題、WebSocket代理和錯誤處理,并提供了生產(chǎn)環(huán)境配置建議和調(diào)試技巧,感興趣的朋友一起看看吧
    2024-12-12
  • React組件化的一些額外知識點補充

    React組件化的一些額外知識點補充

    React是一個用于構(gòu)建用戶界面的JavaScript庫,下面這篇文章主要給大家介紹了關(guān)于React組件化的一些額外知識點,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-10-10
  • 使用 Rails API 構(gòu)建一個 React 應(yīng)用程序的詳細步驟

    使用 Rails API 構(gòu)建一個 React 應(yīng)用程序的詳細步驟

    這篇文章主要介紹了使用 Rails API 構(gòu)建一個 React 應(yīng)用程序的詳細步驟,主要包括后端:Rails API部分,前端:React部分及React組件的相關(guān)操作,具有內(nèi)容詳情跟隨小編一起看看吧
    2021-08-08
  • React倒計時功能實現(xiàn)代碼——解耦通用

    React倒計時功能實現(xiàn)代碼——解耦通用

    這篇文章主要介紹了React倒計時功能實現(xiàn)——解耦通用,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09

最新評論

宣汉县| 鄂温| 龙泉市| 临沂市| 安陆市| 宜章县| 荥阳市| 连云港市| 罗田县| 遂平县| 社会| 吉水县| 锦屏县| 革吉县| 三江| 阿克陶县| 泾源县| 临朐县| 松原市| 镇雄县| 湘乡市| 瑞金市| 阿拉善盟| 大方县| 石屏县| 邢台市| 商南县| 农安县| 调兵山市| 卓尼县| 江门市| 白水县| 满洲里市| 察隅县| 阿拉善盟| 高安市| 宜章县| 华宁县| 墨脱县| 乌鲁木齐县| 玛纳斯县|