Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >下一步JS -如何防止布局重新安装?

下一步JS -如何防止布局重新安装?
EN

Stack Overflow用户
提问于 2019-12-29 04:12:25
回答 4查看 11.3K关注 0票数 14

使用布局模式尝试下一步:

https://github.com/zeit/next.js/tree/canary/examples/layout-component

问题是布局组件在每次页面更改时都会被重新挂载。我需要使用布局组件作为容器,这样它就可以在每次挂载上从服务器上获取数据。如何防止布局得到重新安装?还是我漏掉了什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-12-29 09:34:00

如果您将Layout组件放在页面组件中,它将重新挂载到页面导航(页面切换)上。

您可以将您的页面组件与Layout组件包装在_app.js中,这样可以防止它重新安装。

就像这样:

代码语言:javascript
运行
AI代码解释
复制
// _app.js
import Layout from '../components/Layout';

class MyApp extends App {
 static async getInitialProps(appContext) {
    const appProps = await App.getInitialProps(appContext);
    return {
      ...appProps,
    };
  }

  render() {
    const { Component, pageProps } = this.props;

    return (
      <Layout>
        <Component {...pageProps} />
      <Layout />
    );
  }
}

export default MyApp;
票数 10
EN

Stack Overflow用户

发布于 2020-04-24 05:31:00

这有助于我进行持久的布局。作者将一个函数组合在一起,将页面组件封装在布局组件中,然后将该获取函数传递给_app.js。这样,_app.js实际上就是呈现布局的组件,但是您可以指定哪些页面使用哪个布局(以防有多个布局)。

因此,您可以灵活地在整个站点中进行多个布局,但是那些共享相同布局的页面实际上将共享相同的布局组件,并且不需要在导航上重新挂载。

以下是Next.js中的持久布局模式全文的链接

以下是重要的代码片段。一个页面,然后是_app.js

代码语言:javascript
运行
AI代码解释
复制
// /pages/account-settings/basic-information.js
import SiteLayout from '../../components/SiteLayout'
import AccountSettingsLayout from '../../components/AccountSettingsLayout'

const AccountSettingsBasicInformation = () => (
  <div>{/* ... */}</div>
)

AccountSettingsBasicInformation.getLayout = page => (
  <SiteLayout>
    <AccountSettingsLayout>{page}</AccountSettingsLayout>
  </SiteLayout>
)

export default AccountSettingsBasicInformation
代码语言:javascript
运行
AI代码解释
复制
// /pages/_app.js
import React from 'react'
import App from 'next/app'

class MyApp extends App {
  render() {
    const { Component, pageProps, router } = this.props

    const getLayout = Component.getLayout || (page => page)

    return getLayout(<Component {...pageProps}></Component>)
  }
}

export default MyApp
票数 20
EN

Stack Overflow用户

发布于 2021-05-20 06:37:22

尽管这是一次又一次地挂载Layout的主题,但造成这个问题的根本原因是您在某个子组件中加载了一些数据,这些子组件一次又一次地被获取。

经过一番周旋之后,我发现这些问题都不是Next.Js或SWR解决的问题。问题,回到原点,是如何精简单个数据副本到某个子组件。

上下文

context为例。

Config.js

代码语言:javascript
运行
AI代码解释
复制
import { createContext } from 'react'
export default createContext({})

_App.js

代码语言:javascript
运行
AI代码解释
复制
import Config from '../Config'

export default function App({ Component, pageProps }) {
  return (
    <Config.Provider value={{ user: { name: 'John' }}}>
      <Component {...pageProps} />
    </Config.Provider>
  )
}

Avatar.js

代码语言:javascript
运行
AI代码解释
复制
import { useContext } from 'react'
import Config from '../Config'

function Avatar() {
  const { user } = useContext(Config)
  return (
    <span>
      {user.name}
    </span>
  )
}

export default Avatar

无论您如何挂载和卸载,只要_app没有重新呈现,您就不会以重呈现结束。

可写

上面的示例只处理可读的内容。如果它是可写的,则可以尝试将状态传递到上下文中。setUser将在消费者中照顾这套设备。

代码语言:javascript
运行
AI代码解释
复制
  <Provider value={useState({})} />
代码语言:javascript
运行
AI代码解释
复制
  const [user, setUser] = useContext(Config)

setUser是“缓存”的,不会被更新。因此,我们可以使用这个功能来重置用户在任何时候的儿童消费者。

还有其他的方法,前。反应后坐力。但是,您或多或少是在处理状态管理系统,以便在不接触其他节点的情况下将副本(值或函数)发送到其他地方。我会把这个作为一个答案,因为即使我们解决了布局问题,这个问题也不会消失。如果我们解决了这个问题,我们根本不需要处理布局问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59519286

复制
相关文章
Django小技巧15: 使用基于类视图的Mixins
依类似的方式, 你可以在UpdateView中, 重用相同的FormMessageMixin, 并覆盖默认的form_invalid_message方法.
用户1416054
2018/12/06
1.1K0
Django小技巧15: 使用基于类视图的Mixins
Django装饰器的使用 (类视图)
为了理解方便,我们先来定义一个为函数视图准备的装饰器(在设计装饰器时基本都以函数视图作为考虑的被装饰对象),及一个要被装饰的类视图。
kirin
2021/02/04
1.1K0
django的类视图-11
使用函数方式定义的视图叫函数视图,虽然使用方便,便于理解,但是当一个s视图有多种请求方式的时候,变需要使用分支来编写不同请求方式对应的逻辑。
py3study
2020/01/19
7850
Django 中针对基于类的视图添加 csrf_exempt
在Django中对于基于函数的视图我们可以 @csrf_exempt 注解来标识一个视图可以被跨域访问。那么对于基于类的视图,我们应该怎么办呢? 简单来说可以有两种访问来解决 方法一:在类的 dispatch 方法上使用 @csrf_exempt from django.views.decorators.csrf import csrf_exempt class MyView(View): def get(self, request): return HttpResponse("
kongxx
2018/05/14
1.6K0
Django之基于iframe的ajax
那么伪造ajax的方式即为将向服务端发送请求返回的数据返回到iframe中,再使用js从iframe中的文档中取出数据使用。
py3study
2020/01/21
1.1K0
Django 2.1.7 类视图
Django 2.1.7 创建应用模板 Django 2.1.7 配置公共静态文件、公共模板路径 Django 2.1.7 模板语言 - 变量、标签、过滤器、自定义过滤器、模板注释 Django 2.1.7 模板继承 Django 2.1.7 模板 - HTML转义 Django 2.1.7 模板 - CSRF 跨站请求伪造 Django 2.1.7 模板 - 图片验证码的实现 Django 2.1.7 模板 - 动态URL 反向解析 Django 2.1.7 模板 - 动态配置静态文件路径
Devops海洋的渔夫
2019/07/15
7010
Django 2.1.7 类视图
Django 官方推荐的姿势:类视图
在开发网站的过程中,有一些视图函数虽然处理的对象不同,但是其大致的代码逻辑是一样的。比如一个博客和一个论坛,通常其首页都是展示一系列的文章列表或者帖子列表。对处理首页的视图函数来说,虽然其处理的对象一个是文章,另一个是帖子,但是其处理的过程是非常类似的:首先是从数据库取出文章或者帖子列表,然后将这些数据传递给模板并渲染模板。于是,django 把这些相同的逻辑代码抽取了出来,写成了一系列的通用视图函数,即基于类的通用视图(Generic Class Based View)。
HelloGitHub
2021/05/14
1.3K0
django 入门:通用视图类重构视图
博客:https://www.jianshu.com/p/8cdf099e974f
陈宇明
2020/12/15
9080
django 入门:通用视图类重构视图
Django(57)Generic类视图[通俗易懂]
上篇我们通过mixin可以非常方便的实现一些CURD操作。实际上针对这些mixin,DRF还进一步的进行了封装,放到generics下。有以下generic类视图:
全栈程序员站长
2022/09/19
5190
Django内置的通用类视图及实例
表示对象列表的一个页面. 执行这个视图的时候,self.object_list将包含视图正在操作的对象列表(通常是一个查询集,但不是必须). 属性:
菲宇
2019/06/13
3K0
Django内置的通用类视图及实例
django--ajax的使用,应用
AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML,现在更多使用json数据)
测试开发社区
2019/09/20
8300
django--ajax的使用,应用
django--ajax的使用,应用
AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML,现在更多使用json数据)
py3study
2018/08/03
1.1K0
django 1.8 官方文档翻译: 3-4-1 基于类的视图
视图是一个可调用对象,它接收一个请求然后返回一个响应。这个可调用对象可以不只是函数,Django 提供一些可以用作视图的类。它们允许你结构化你的视图并且利用继承和混合重用代码。后面我们将介绍一些用于简单任务的通用视图,但你可能想要设计自己的可重用视图的结构以适合你的使用场景。完整的细节,请参见基于类的视图的参考文档。
ApacheCN_飞龙
2022/11/27
8830
Django REST Framework-常用的类视图
Django REST Framework是基于Django的一个用于构建Web API的框架。它提供了许多用于构建Web API的工具和实用程序,其中最常用的是类视图。类视图是一种Django REST Framework的API视图,它是基于类的视图。它提供了一种方便的方式来编写可重用的Web API视图,并带有许多有用的内置功能。
玖叁叁
2023/04/24
7200
django 1.8 官方文档翻译: 3-4-3 使用基于类的视图处理表单
你自己实现这些功能经常导致许多重复的样本代码(参见在视图中使用表单)。为了避免这点,Django 提供一系列的通用的基于类的视图用于表单的处理。
ApacheCN_飞龙
2022/11/27
1.9K0
python测试开发django-62.基于类的视图(APIView和View)
django中编辑视图views.py有两种方式,一种是基于类的实现,另外一种是函数式的实现方式,两种方法都可以用。 REST框架提供了一个APIView类,它是Django View类的子类。
上海-悠悠
2019/09/16
1.5K0
python测试开发django-62.基于类的视图(APIView和View)
Django-DRF | GenericAPIView 视图类
Django REST框架构建Web API。Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
小团子
2020/01/16
1.2K0
Django-DRF | GenericAPIView 视图类
利用Django通用类视图(class
最近在学习Django,官方文档介绍地十分详细。但是“大而全”就难免会有些不够速成,和我们这个浮躁的互联网时代格格不入,所以我就整理了这个文档。就像coolshell说的,一泡屎的时间就可以看完。
py3study
2020/01/03
1.5K0
35. Django 2.1.7 类视图
1) 首先在应用的view.py中创建两个视图test_method和test_method_handle
Devops海洋的渔夫
2022/01/17
2950
35. Django 2.1.7 类视图
点击加载更多

相似问题

使用基于类的视图和ajax的Django应用程序?

30

用于处理AJAX响应的基于django类的视图

11

使用基于Django类的视图处理AJAX时遇到问题

10

基于Django类的视图

30

基于类的视图Django

15
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档