当前位置: 首页 > news >正文

Nextjs9中在_app.js入口使用getInitialProps请求数据给全局使用

Nextjs9中在_app.js入口使用getInitialProps请求数据,在传给子组件使用,解决导航栏全局在客户端渲染闪烁的问题.我这是用的class 组件的方式的,入口文件是这样的

function MyApp({ Component, pageProps,store,navData}) {}

如下,注意这里不同于页面级组件  使用 

return {props: {authStates: authState,data1,data2,data3},
};

而是直接反射出去. 如下

MyApp.getInitialProps = async ({ctx}) => {let postData = {requestName:"P_PRODUCT_CATEGORY"}let result = await $fetch('post',P_PRODUCT_CATEGORY,postData)let res = await result; //必须通过此方法才可返回数据const navData = res.data;return {navData,};
};

使用的时候也是直接

function MyApp({ Component, pageProps,store,navData}) {}

把之前的变量加进去, 就可以视图使用了.

function MyApp({ Component, pageProps,store,navData}) {return  <Provider store={store}><div className={`containers`}><Headers data={navData}/><Component {...pageProps} /></div></Provider>
}

下面是完整的:

import { useCookie } from 'next-cookie'
import React,{ useState } from 'react';
import Head from 'next/head'
import {Provider} from 'react-redux';
import createWrapper from "next-redux-wrapper";
import store from '../redux/store';
import Router from "next/router";
/**header**/
import Headers from '../components/headers'
import Footer from '../components/footers'
import {$fetch, $fetch_serve} from "../serve";
import {P_BANNER, P_PRODUCT, P_PRODUCT_CATEGORY} from "../config/api";
import {parse,serialize} from "cookie";
import * as $Tool from "../util/tool";
import { setProductCategory } from '../redux/actions/counterActions.js';
import { useEffect } from 'react';
import { useSelector } from 'react-redux';
import cookie from "react-cookies";if (typeof window !== 'undefined') {require('../public/static/js/tool.js');if ("serviceWorker" in navigator) {window.addEventListener("load", () => {navigator.serviceWorker.register("/service-worker.js");});}}function MyApp({ Component, pageProps,store,navData}) {return  <Provider store={store}><><noscript type="text/html" dangerouslySetInnerHTML={{__html:notscrit}}/></><div className={`containers`}><Head><html lang="ja" /><title>test</title><meta data-n-head={`ssr`} httpEquiv="Content-Language" content="en" /><meta data-n-head={`ssr`} charSet={`utf-8`}/><meta data-n-head={`ssr`} name="author" content="Our team"/><script src="https://code.jquery.com/jquery-3.6.4.min.js"></script><scripttype="module"src="/static/js/custom.js"/></Head><Headers data={navData}/><Component {...pageProps} /></div></Provider>
}//makeStore function that returns a new store for every request
const makeStore = () => store;MyApp.getInitialProps = async ({ctx}) => {let postData = {requestName:"P_PRODUCT_CATEGORY"}let result = await $fetch('post',P_PRODUCT_CATEGORY,postData)let res = await result; //必须通过此方法才可返回数据const navData = res.data;store.dispatch(setProductCategory(res.data));if(ctx.req){let Cookies ={};if (ctx.req.headers.cookie != null) {ctx.req.headers.cookie.split(';').forEach(l => {var parts = l.split('=');Cookies[parts[0].trim()] = (parts[1] || '').trim();});}let userinfo = decodeURIComponent(Cookies.U_S)userinfo = userinfo!=='undefined' && userinfo!==''?JSON.parse(userinfo):{}const whiteList = ['/collections','/accountsettings','/notificationSettings','/activity','/orderList','/shoppingcart','/shoppingcart/payment','/shoppingcart/success'] // 路由需要登录白名单if (whiteList.indexOf(ctx.asPath) !== -1) { // 在需要登录白名单中 // 需要登录权限进入的路由if(userinfo.user_id){}else {if (ctx.res && ctx.asPath !== "/login") {if(ctx.req.headers.referer.indexOf('/login') != -1){ctx.res.setHeader('Location', `/login`);} else {ctx.res.setHeader('Location', `/login?from=${ctx.req.headers.referer}`);}ctx.res.statusCode = 302;ctx.res.end();}}}if(userinfo.user_id){if (ctx.res && ctx.asPath === "/login") {ctx.res.setHeader('Location', '/home');ctx.res.statusCode = 302;ctx.res.end();}}}return {navData,};
};//withRedux wrapper that passes the store to the App Component
export default createWrapper(makeStore)(MyApp);

完..

原文来自: https://www.lllomh.com/article/details?id=11648663

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • c++: mangle命名规则
  • 数据库设计军规
  • C++ const、constexpr与consteval作用与区别
  • R 语言学习教程,从入门到精通,R的安装与环境的配置(3)
  • 信号相关函数
  • Python | Leetcode Python题解之第318题最大单词长度乘积
  • 药店管理小程序的设计
  • 半导体芯闻--20240804
  • c++ malloc 过大或者0
  • ESP32人脸识别开发- 基础介绍(一)
  • MySQL-InnoDB引擎
  • 图论① dfs | Java | LeetCode 797,Kama 98 邻接表实现(未完成)
  • 自动气象站:高度自动化、智能化和精准化
  • Ubuntu配置Ngbatis学习环境
  • C++适配器
  • 【391天】每日项目总结系列128(2018.03.03)
  • httpie使用详解
  • JavaScript 一些 DOM 的知识点
  • MySQL QA
  • rabbitmq延迟消息示例
  • scala基础语法(二)
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 听说你叫Java(二)–Servlet请求
  • 一道闭包题引发的思考
  • 以太坊客户端Geth命令参数详解
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • ​【已解决】npm install​卡主不动的情况
  • ​iOS实时查看App运行日志
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • ​业务双活的数据切换思路设计(下)
  • #window11设置系统变量#
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (10)STL算法之搜索(二) 二分查找
  • (2024)docker-compose实战 (8)部署LAMP项目(最终版)
  • (52)只出现一次的数字III
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (day18) leetcode 204.计数质数
  • (LeetCode 49)Anagrams
  • (Python第六天)文件处理
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (二)WCF的Binding模型
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (十一)c52学习之旅-动态数码管
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (四)图像的%2线性拉伸
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)scrum常见工具列表
  • .gitignore文件---让git自动忽略指定文件
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .net连接oracle数据库
  • .NET下的多线程编程—1-线程机制概述