React高階組件優(yōu)化文件結(jié)構(gòu)流程詳解
其實(shí)高階組件是一個(gè)將組件寫的更靈活的方式,他的應(yīng)用場景在業(yè)務(wù)開發(fā)中會(huì)非常多樣
這里 我們演示一種 主要還是解決問題的思想最重要 或者是 這個(gè)不叫解決問題 而是設(shè)計(jì)組件結(jié)構(gòu)的思路
我們來模擬一個(gè)場景
在src下有一個(gè) components 文件夾目錄
在 components 下有一個(gè) 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下有一個(gè) 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;
其實(shí) 兩個(gè)組件寫的寫法 基本就是一樣的
只是調(diào)用的接口 和使用的字段不一樣而已 像這么相似的東西 我們真的沒必要寫兩個(gè)組件來處理 直接一個(gè)高階組件就行了
我們先將這兩個(gè)組件刪了
然后 我們在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;
這樣 我們的一個(gè)高階組件就寫好了 然后 講解一下
我們 方法 第一個(gè)參數(shù) 接收一個(gè)url參數(shù) 這個(gè)參數(shù) 用來控制fetch網(wǎng)絡(luò)請求的地址 也可以理解為控制他去調(diào)哪個(gè)接口
然后 第二個(gè)參數(shù) 是一個(gè)組件
最后 將請求回來的數(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ù) 然后 第二個(gè)參數(shù) 現(xiàn)寫的 代碼結(jié)構(gòu) 通過接到的 data參數(shù)來處理組件內(nèi)部 然后再傳給高階組件 去渲染
這個(gè)寫法就會(huì)使我們的多組件項(xiàng)目簡化很多
最后 修改 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>
)
}
}
運(yùn)行結(jié)果如下

大家可以照著寫一次 體會(huì)一下這種關(guān)聯(lián)渲染的邏輯 用好了 可以讓你的項(xiàng)目組件布局簡便非常多 組件越多發(fā)揮空間越大
到此這篇關(guān)于React高階組件優(yōu)化文件結(jié)構(gòu)流程詳解的文章就介紹到這了,更多相關(guān)React優(yōu)化文件結(jié)構(gòu)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Zustand介紹與使用 React狀態(tài)管理工具的解決方案
本文主要介紹了Zustand,一種基于React的狀態(tài)管理庫,Zustand以簡潔易用、靈活性高及最小化原則等特點(diǎn)脫穎而出,旨在提供簡單而強(qiáng)大的狀態(tài)管理功能2024-10-10
使用useMutation和React Query發(fā)布數(shù)據(jù)demo
這篇文章主要為大家介紹了使用useMutation和React Query發(fā)布數(shù)據(jù)demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
解決React報(bào)錯(cuò)Property 'X' does not 
這篇文章主要為大家介紹了解決React報(bào)錯(cuò)Property 'X' does not exist on type 'HTMLElement',有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
React中常見的TypeScript定義實(shí)戰(zhàn)教程
這篇文章主要介紹了React中常見的TypeScript定義實(shí)戰(zhàn),本文介紹了Fiber結(jié)構(gòu),F(xiàn)iber的生成過程,調(diào)和過程,以及 render 和 commit 兩大階段,需要的朋友可以參考下2022-10-10
React組件化的一些額外知識(shí)點(diǎn)補(bǔ)充
React是一個(gè)用于構(gòu)建用戶界面的JavaScript庫,下面這篇文章主要給大家介紹了關(guān)于React組件化的一些額外知識(shí)點(diǎn),文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10
使用 Rails API 構(gòu)建一個(gè) React 應(yīng)用程序的詳細(xì)步驟
這篇文章主要介紹了使用 Rails API 構(gòu)建一個(gè) React 應(yīng)用程序的詳細(xì)步驟,主要包括后端:Rails API部分,前端:React部分及React組件的相關(guān)操作,具有內(nèi)容詳情跟隨小編一起看看吧2021-08-08
React倒計(jì)時(shí)功能實(shí)現(xiàn)代碼——解耦通用
這篇文章主要介紹了React倒計(jì)時(shí)功能實(shí)現(xiàn)——解耦通用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09

