小编joc*_*ers的帖子

如何在 React Native 应用程序中使用 React hook useEffect 每 5 秒渲染一次 setInterval?

我有React Native应用程序,我从得到的数据API通过fetch。我创建了从API. 我需要每 5 秒重新渲染一次。为此,我将我的自定义钩子包装到 setInterval 并且在我的应用程序变得非常缓慢并且当我导航到另一个屏幕时我收到此错误:

无法对卸载的组件执行 React 状态更新。这是一个空操作,但它表明您的应用程序中存在内存泄漏。要修复,请取消 useEffect 清理函数中的所有订阅和异步任务。

你能告诉我如何解决这个错误,哪种方法是最好的方法setInterval,因为我认为我的方法不好。

我的自定义钩子:

export const useFetch = url => {
  const [state, setState] = useState({ data: null, error: false, loading: true })

  useEffect(() => {
    setInterval(() => {
      setState(state => ({ data: state.data, error: false, loading: true }))
      fetch(url)
        .then(data => data.json())
        .then(obj =>
          Object.keys(obj).map(key => {
            let newData = obj[key]
            newData.key = key
            return newData
          })
        )
        .then(newData …
Run Code Online (Sandbox Code Playgroud)

javascript setinterval react-native react-hooks use-effect

10
推荐指数
2
解决办法
3万
查看次数

无法使用react-native应用程序在android模拟器上登录Google帐户

我有react-native应用程序,它可以通过Google帐户运行。当我在 Android 模拟器上启动我的应用程序时,我无法登录 Google 帐户。收到错误消息:“与 Google 服务器通信时出现问题。请稍后重试”。我的复制步骤:

  • 重新安装了应用程序和安卓模拟器。
  • 清理了应用程序和模拟器缓存。
  • 使用不同的 API 检查不同的模拟器模型。
  • 尝试从 google chrome 登录 Android 模拟器中的 Google 帐户,从“设置”=>“帐户”=>“添加帐户”=>“Google”。

所有这些步骤对我来说都不起作用。每次都会遇到同样的情况:加载过程中,旋转器启动大约一分钟,然后出现错误:“无法登录”。有人可以帮我吗?

在此输入图像描述

gmail android android-emulator android-studio react-native

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

无法下载 IOS 模拟器 Xcode 12.4。无法从 ADC 下载软件包。没有向 Xcode 注册有效帐户

Macbook Air M1,在Xcode 12.4中出现错误:

无法下载并安装 IOS 12.0 模拟器。无法从 ADC 下载软件包。没有在 Xcode 中注册的有效帐户能够访问此资源。请联系 Apple 开发者计划支持来解决帐户访问问题。

我在以前的 Xcode 和 Intel 芯片上的 Macbook 上从未出现过此错误。请你告诉我如何解决它。

在此输入图像描述

xcode developer-tools ios ios-simulator

8
推荐指数
1
解决办法
6019
查看次数

如何使用 ESLint 通过特定文件夹的绝对路径限制模块的导入

我有文件夹结构:

my_project
 |------ modules.private
 |        |------ broker_module
 |                 |------ BrokerModule.js
 |
 |------ src
 |        |------ AppService
 |                 |------ AppService.js
 |        
 |        |------ Components
 |                 |------ ScreenLogin.js
 | 
   
Run Code Online (Sandbox Code Playgroud)

我需要限制所有区域的 module.private 的绝对导入,除了“./src/AppService”。

情况无错误。Linted 文件是“./src/AppService/AppService.js”:

// NO ERROR
import { BrokerModule } from 'broker_module';
Run Code Online (Sandbox Code Playgroud)

有错误的情况。Linted 文件是“./src/componets/ScreenLogin.js”:

// Error: can not import broker_module to restricted zone
import { BrokerModule } from 'broker_module';
Run Code Online (Sandbox Code Playgroud)

我已经尝试过https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-restricted-paths.md,并制定了如下规则:

// the rule is interpreted like you can not import to target zone './src/components' from 'from': 'broker_module'

'rules': { …
Run Code Online (Sandbox Code Playgroud)

javascript import absolute-path eslint eslintrc

6
推荐指数
1
解决办法
8457
查看次数

如何在使用 Apollo 和 React Native 的每个 graphql 请求之前实现自动 jwt 令牌刷新?

我想在React Native应用程序中使用Apollo中间件对GraphQL 的每个请求之前实现自动刷新 jwt 令牌。每次用户登录后,他都会获得两个令牌:访问和刷新。访问令牌是在授权标头中使用的 30-60 分钟的短令牌。刷新令牌是确认刷新令牌 graphql 突变的 60 天长的令牌。我的流程:

  1. 用户登录并获得 2 个令牌 -> 使用Appollo setContext将访问令牌放入授权标头。
  2. 用户向GraphQL发出请求-> 在客户端检查 accessToken 的 expireTime: -> 如果它没有过期 -> 确认请求 -> 如果它已经过期 -> 调用GraphQL refreshToken 突变 -> 获取新令牌 -> 确认请求。为了在客户端保留令牌,我使用KeyChain存储。你能告诉我我也应该使用Apollo缓存来保存令牌吗?我应该为令牌编写Apollo状态吗?我如何实现我的流程?

GraphQL 突变

mutation UpdateTokens($refreshToken: String!, $refreshTokenId: String!) 
 {
    updateTokens(refreshToken: $refreshToken, refreshTokenId: $refreshTokenId) {
      user {
        name
        phone
      }
      accessToken
      refreshToken
    }
  }
Run Code Online (Sandbox Code Playgroud)

应用程序.js

import React from 'react'
import …
Run Code Online (Sandbox Code Playgroud)

node.js jwt graphql react-native apollo-client

5
推荐指数
1
解决办法
3679
查看次数

如何从错误中找到标签:在 React Native Android 中尝试使用标签 85273 更新不存在的视图

在 React Native 应用程序的生产中,从 firebase 的 crashlytics 获取 Android 上的错误:


    Fatal exception: com.facebook.react.uimanager.IllegalViewOperationException.
    Trying to update non-existent view with tag 85273.

Run Code Online (Sandbox Code Playgroud)

并且没有崩溃的情况,因此无法检测到它。我在模拟器和真正的 Android 设备上检查了很多次。

我们从这次事故中发现了什么?

  • 导致异常的 updateView 方法位于 node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java; 
  

    public void updateView(int tag, String className, ReadableMap props) {
        ViewManager viewManager = mViewManagers.get(className);
        if (viewManager == null) {
          throw new IllegalViewOperationException("Got unknown view type: " + className);
        }
        ReactShadowNode cssNode = mShadowNodeRegistry.getNode(tag);
        if (cssNode == null) {
          throw new IllegalViewOperationException("Trying to update non-existent view with tag " + tag);
        }
    
        if …
Run Code Online (Sandbox Code Playgroud)

debugging crash-reports crashlytics react-native react-native-android

5
推荐指数
0
解决办法
365
查看次数

如何解决 Xcode 10 中的错误:多个命令产生....../字体

我有 React Native App。我安装了 react-native-vector-icons 库。在我在 Xcode 中收到此错误后:

多个命令产生“/Users/jocoders/Library/Developer/Xcode/DerivedData/openCalls-gtlsipogexxyteffomqvumgwiihd/Build/Products/Debug-iphonesimulator/openCalls.app/Fonts”:

  1. 目标“openCalls”(项目“openCalls”)具有从“/Users/jocoders/openCalls/node_modules/react-native-vector-icons/Fonts”到“/Users/jocoders/Library/Developer/Xcode/DerivedData/openCalls”的复制命令-gtlsipogexxyteffomqvumgwiihd/Build/Products/Debug-iphonesimulator/openCalls.app/Fonts'
  2. 目标“openCalls”(项目“openCalls”)具有从“/Users/jocoders/openCalls/node_modules/react-native-vector-icons/Fonts/Fonts”到“/Users/evgeniykireev/Library/Developer/Xcode/DerivedData”的复制命令/openCalls-gtlsipogexxyteffomqvumgwiihd/Build/Products/Debug-iphonesimulator/openCalls.app/Fonts'

xcode compiler-errors ios react-native

4
推荐指数
2
解决办法
1821
查看次数

Android 工作室错误:无法将任务“copyDebugIconFonts”添加为具有该名称的任务已存在

我有React Native项目。当我构建Android版本时,我收到一个错误:无法将任务“copyDebugIconFonts”添加为具有该名称的任务已存在。在我的终端中,我有这个错误: FAILURE : Build failed with an exception。

  • 其中:脚本“/Users/evgeniykireev/openCalls/node_modules/react-native-vector-icons/fonts.gradle”行:16

  • 出了什么问题:无法将任务“copyDebugIconFonts”添加为具有该名称的任务已存在。

我的 build.gradle:

buildscript {
    ext {
        buildToolsVersion = "28.0.3"
        minSdkVersion = 16
        compileSdkVersion = 28
        targetSdkVersion = 28
        supportLibVersion = "28.0.0"
    }
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath("com.android.tools.build:gradle:3.4.1")

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        mavenLocal()
        maven {
            // All of React Native (JS, …
Run Code Online (Sandbox Code Playgroud)

fonts icons android android-studio react-native

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

如何将两个字符串数组转换为对象数组,例如 JavaScript 中具有特定键的键和值?

我需要转换两个具有相同长度的字符串数组:

const arr1 = ['Jessica', 'Ben', 'Samantha', 'John', 'Sandy'];
const arr2 = ['21', '45', '34', '90', '67']; 
Run Code Online (Sandbox Code Playgroud)

最后我需要得到这个数组与特定的键名称,年龄:

const result = [
{ name: 'Jessica', age: '21'}, 
{ name: 'Ben', age: '45'}, 
{ name: 'Samantha', age: '34'},
{ name: 'John', age: '90' },
{ name: 'Sandy', age: '67' },
];
Run Code Online (Sandbox Code Playgroud)

你能告诉我我该怎么做吗?

javascript arrays function javascript-objects

-2
推荐指数
1
解决办法
953
查看次数