小编eiv*_*dml的帖子

Next.js:减少数据获取并在页面之间共享数据

我正在寻找在 Next.js 应用程序中更好地获取数据的解决方案。在这个问题上我不只是在寻找一个解决方案,我正在寻找多种选择,所以我们可以看一下利弊。

我遇到的问题

现在我有几个页面都包含一个显示一些静态内容的组件和一个从 API 获取的一些动态内容的组件。每个页面都做一个fetch()在他们getInitialProps()自己的页面数据中,还有页脚数据,这对所有页面都是一样的

这当然有效,但有很多重复的数据提取。页脚数据将始终为所有页面显示并且始终相同。它也很少在 API 中更改,因此无需重新验证数据。

我正在寻找的答案

我不只是想解决这个问题,我也在寻找一个概述,以便为未来的项目学习一些新的实践。我喜欢编写“明显”的代码,所以不要寻找太hacky的解决方案,比如写入window对象等。优先考虑依赖较少的简单解决方案。目标是一个快速的网站。减少网络使用/API 调用并不是那么重要。

到目前为止我的想法

这是我想出的可能的解决方案,从简单/明显到更复杂。

  1. 在页脚组件(客户端)内进行提取
  2. 在所有/页面上的 getInitialProps(服务器端和客户端)中执行提取
  3. 在 _app.js 中使用 HOC 进行 fetch 并挂钩并将其getInitialProps()添加到 props,因此数据可用于所有页面
  4. 使用 zeit/swr 和数据预取来缓存数据
  5. 使用 redux 存储全局状态

所有这些“工作”,但其中大多数会不必要地重新获取数据,和/或增加一点复杂性。以下是我所看到的优缺点(数字与上面相同):

  1. 简单的!提取代码仅在一处,它位于使用它的地方。页面加载后获取数据,因此内容“跳转”查看。数据一直在重新获取。
  2. 简单的!在服务器上获取数据,因此在呈现页面之前内容可用。为每个页面重新获取数据。我们必须记住为他们的getInitialProps().
  3. 我们可以在一个地方进行 fetch 并将其添加到所有页面 props,因此页脚数据可自动用于所有页面的 props。对于某些人来说,要轻松理解正在发生的事情可能会更复杂一些,因为它需要更多地了解 Next.js/React 的工作原理。仍然重新获取所有页面的数据。我们现在fetch()依次进行两次调用(首先在 _app.js 中加载页脚内容,然后在每个页面中获取自定义内容),所以它甚至更慢。
  4. 有点简单。我们甚至可以在加载 JS 之前使用预取将数据加载到缓存。在第一页加载后,我们将有快速的数据获取。可以直接在页脚组件中获取代码。该rel="preload"预取技术不会与所有类型的获取(使用groq例如理智的客户)的工作。要对数据进行页面加载完成后加载没有“跳跃”的内容,我们应该提供useSWR()具有initialData仍需要我们在获取数据getInitialProps(),但它是不够的,只是做在服务器端。可以用新的getServerSideProps()
  5. 我们可以加载一次数据(?)并使其在整个应用程序中可用。快速且更少/无需重新获取。添加外部依赖。更复杂的是你必须学习 redux,甚至只加载一个共享数据对象。

当前解决方案,使用项目符号 2 中描述的解决方案。

const HomePage …
Run Code Online (Sandbox Code Playgroud)

fetch reactjs redux next.js sanity

37
推荐指数
1
解决办法
2万
查看次数

使用Swift读取本地文件的简单方法?

我正在尝试学习新的Swift编程语言.它看起来很棒,但我很难做一些像读取本地.txt文件内容这样简单的事情.

我已经尝试了几个我可以通过Google找到的例子,但是它们给出了编译错误,比如这里的答案:从文本文件中读取和写入数据 如果我稍微调整一下代码,它可以工作,但只能从内部的特殊位置读取该项目.

为什么用Swift读取.txt文件就像使用Ruby一样简单?我将如何阅读位于的文件内容~/file.txt

日Thnx

swift

26
推荐指数
3
解决办法
7万
查看次数

SwiftUI:防止 Image() 在屏幕边界之外扩展视图矩形

我正在努力实现的目标

我正在尝试创建一个 SwiftUI 视图,其中图像应扩展整个屏幕 ( edgesIgnoringSafeArea(.all)),然后在其上叠加一个视图,该视图也填充整个屏幕,但尊重安全区域。

我试过的

这是我的代码,它很接近:

struct Overlay: View {
  var body: some View {
    VStack {
      HStack {
        EmptyView()
        Spacer()
        Text("My top/right aligned view.")
          .padding()
          .background(Color.red)
      }
      Spacer()
      HStack {
        Text("My bottom view")
          .padding()
          .background(Color.pink)
      }
    }
  }
}

struct Overlay_Previews: PreviewProvider {
  static var previews: some View {
    ZStack {
      Image(uiImage: UIImage(named: "background")!)
        .resizable()
        .edgesIgnoringSafeArea(.all)
        .aspectRatio(contentMode: .fill)
      Overlay()
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

问题和经过测试的解决方案

问题是图像没有像看起来那样被剪裁,因此它将父视图扩展到大于屏幕宽度的宽度,然后使右上方对齐的红色文本框浮出屏幕(见图)。

在此处输入图片说明

我尝试.clipped()在不同的地方使用,但没有运气。GeometryReader如果可能的话,我最好避免使用。

问:如何让图像视图只填满屏幕?

swift swiftui

16
推荐指数
2
解决办法
5908
查看次数

无法使用Firebase和ElasticSearch(使用Flashlight)进行正确的路径监控或查询

我正在尝试将ElasticSearch与Firebase集成.我正在使用Firebase中的Flashlight集成来全部设置.我已经将代码部署到Heroku,如上面链接的Github repo中所述.

它的工作原理是,当我插入查询对象时,/search/request/我得到一个/search/response结果.但结果有点乱,不正确.但我无法弄清楚出了什么问题.

这是config.js我定义要监视的路径的位置:

/** Paths to Monitor
 *
 * Each path can have these keys:
 * {string}   path:    [required] the Firebase path to be monitored, for example, `users/profiles`
 *                     would monitor https://<instance>.firebaseio.com/users/profiles
 * {string}   index:   [required] the name of the ES index to write data into
 * {string}   type:    [required] name of the ES object type this document will be stored as
 * {Array}    fields:  list of fields to be monitored …
Run Code Online (Sandbox Code Playgroud)

json heroku node.js elasticsearch firebase

11
推荐指数
1
解决办法
335
查看次数

Xcode的SceneKit编辑器呈现.dae文件错误,Xcode有时会在预览期间崩溃

我正在试图弄清楚如何将.dae带动画的文件导入Xcode和SceneKit.

它有点工作,但它真的很麻烦,我无法预览文件,Xcode有时会在尝试预览.daeXcode中的文件时崩溃.

这是我导入动画模型的方式

  1. 我从Mixamo下载动画角色,作为Collada文件,使用下面的设置.

在此输入图像描述

  1. 创建一个全新的SceneKit iOS项目,导入.dae文件,然后在Xcode文件列表中选择该文件进行预览.结果如下所示.我已经完全缩放以确保我不仅仅是从网格内部查看模型.线条看起来像infinetly延伸.

在此输入图像描述

  1. 如果我使用ConvertToXcodeCollada工作流,并验证.dae XML只有一个<animation>带有相应结束标记的标记,然后将其导入Xcode,它将根本不会打开.见下图.

在此输入图像描述

  1. 如果我导入的.dae文件版本使用ConvertToXcodeCollada转换,并且添加.dae文件作为.scn场景文件中的子参考,则模型会正确显示,并且动画正在播放.图片如下.

在此输入图像描述

那我该怎么做呢?

我还尝试将动画模型导入Blender,然后从那里将其导出到Collada(youtube上的教程中的非结构),以及相同的结果.有没有办法我能以正确的方式做到这一点,它的工作方式应该如此,没有Xcode表现出错误?如果我能.dae直接预览和编辑文件的材料等会更容易,而不必总是将它们添加到现有的.scnScene Kit场景中.

xcode collada ios scenekit

10
推荐指数
1
解决办法
658
查看次数

SwiftUI:如何遍历可绑定对象的数组?

我正在尝试学习SwiftUI,以及绑定如何工作。

我有这段代码有效,它显示了一个项目列表。轻按一个项目后,对该项目的绑定将传递给子视图:

struct ProjectsView: View {
  @ObjectBinding var state: AppState
  @State var projectName: String = ""

  var body: some View {
    NavigationView {
      List {
        ForEach(0..<state.projects.count) { index in
          NavigationLink(destination: ProjectView(project: self.$state.projects[index])) {
            Text(self.state.projects[index].title)
          }
        }
      }
      .navigationBarTitle("Projects")
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

子视图,我在其中使用绑定对项目进行变异:

struct ProjectView: View {
  @Binding var project: Project
  @State var projectName: String = ""

  var body: some View {
    VStack {
      Text(project.title)
      TextField(
        $projectName,
        placeholder: Text("Change project name"),
        onCommit: {
          self.project.title = self.projectName
          self.projectName = ""
      })
      .padding() …
Run Code Online (Sandbox Code Playgroud)

binding swift swiftui

10
推荐指数
1
解决办法
888
查看次数

Mark中的Markdown列表,CR上的自动新子弹

我在Vim中使用Markdown写了很多文字.我想知道是否有可能让Vim自动用子弹*开始下一行*或 - 如果我目前在列表中的文本行上工作,然后按回车键?

许多其他文本编辑器都会这样做(例如Notational Velocity),所以如果在Vim中这也是可能的话会很棒.

我想让Vim做什么:

- List element 1
- List element 2[press enter]
- (We are automatically here, with the bullet)
Run Code Online (Sandbox Code Playgroud)

我只想要这个用于Markdown文件.

希望你能理解!日Thnx!

vim markdown

9
推荐指数
1
解决办法
2578
查看次数

使用Swift Combine创建Timer Publisher

我一直在看通过SwiftUI WWDC进行数据流。他们有一张带有示例代码的幻灯片,其中他们使用Timer发布者,该发布者连接到SwiftUI视图,并随时间更新UI。

我正在编写一些代码,在其中我想做完全相同的事情,但是无法弄清楚它PodcastPlayer.currentTimePublisher是如何实现的,然后将其连接到UI结构。我还看了所有关于Combine的视频。

我该如何实现?

示例代码:

struct PlayerView : View {
  let episode: Episode
  @State private var isPlaying: Bool = true
  @State private var currentTime: TimeInterval = 0.0

  var body: some View {
    VStack { // ...
      Text("\(playhead, formatter: currentTimeFormatter)")
    }
    .onReceive(PodcastPlayer.currentTimePublisher) { newCurrentTime in
      self.currentTime = newCurrentTime
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

publisher swift swiftui combine

9
推荐指数
3
解决办法
1355
查看次数

ARAnchor 和 AnchorEntity 有什么区别?

我目前正在用 RealityKit 做一些实验。

我一直在看一些示例代码,我有点困惑之间的差异ARAnchorAnchorEntity,当使用一个比其他。

到目前为止,我知道:

  • 两者都是描述现实世界中位置的锚点。
  • AnchorEntity也可以将 otherEntity作为子项,因此您可以将模型对象直接添加到锚点。你不能用 来做到这一点ARAnchor,你必须“手动”将模型对象添加到rootNode,并使用锚的位置正确放置它。
  • 在文档中它说 ARKit 使用添加ARAnchor来优化锚点周围区域的跟踪。的文档AnchorEntity没有指定这一点。

现在我将一个AnchorEntity作为“根节点”添加到会话中,因为它使用起来更简单,所以我可以简单地将模型作为子项直接添加到这个锚点。但随后我还在ARAnchor场景的锚点中添加了一个位于相同位置的 ,以增强围绕该点的跟踪。这是必要的吗?

问:谁能帮我弄清楚这两者的区别和用例?

augmented-reality swift arkit realitykit

9
推荐指数
1
解决办法
2511
查看次数

Swift / Cocoa:如何观察文件夹的变化?

我正在编写一个小型macOS应用程序,希望在其中查看文件夹中的更改。它不需要监视子文件夹,我只想在文件添加到文件夹或删除文件时收到通知。

看起来NSFileCoordinator和/或NSFilePresenter可以用来实现这一目标,但是我无法理解如何使用它们来实现这一目标。

理想情况下,无需包含第三方框架即可解决此问题。

macos cocoa nsfilecoordinator nsfilepresenter swift

7
推荐指数
2
解决办法
1406
查看次数