小编And*_*dré的帖子

防止子组件在上下文提供者下面重新渲染并带有备忘录

我在 React 中使用上下文提供程序来跨多个组件共享数据。然而,由于我的一个子组件的值发生了变化,它会重新渲染我的所有其他组件,这在一定程度上导致了性能问题。所以我想阻止我的子组件重新渲染。我尝试使用 React.memo() 但每当我设置 Context Provider 的状态时它仍然会呈现。

const Authenticator = React.memo(() => {
  
  const [myChat, setMyChat] = useContext(ChatContext);

  console.log("rerender"); // gets called everytime on click
  return (
    <Button
      title="click me"
      onPress={() => setMyChat({ text: "hello" })}
    ></Button>
  );
});
Run Code Online (Sandbox Code Playgroud)

我的上下文提供程序如下所示:

const ChatProvider = ({ children }) => {
  const [myChat, setMyChat] = useState([]);

  return (
    <ChatContext.Provider value={[myChat, setMyChat]}>
      {children}
    </ChatContext.Provider>
  );
};
Run Code Online (Sandbox Code Playgroud)

我的 App.js 如下所示:

<ChatProvider>
  <Authenticator />
</ChatProvider>
Run Code Online (Sandbox Code Playgroud)

memoization reactjs react-native react-context

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

允许在 safari 上使用 audio.play() 进行聊天应用

由于 Apple 禁用了HTMLMedia?Element?.play() 在没有用户交互的情况下通过javascript自动播放音频的功能,我不确定当用户在页面加载后与 DOM 交互之前收到聊天消息时应该如何播放声音。

socket.on("receive message", data => {
  const receiveSound = new Audio("1.mp3");
  messages.push(data);
  receiveSound.play();
});
Run Code Online (Sandbox Code Playgroud)

我尝试在mousemove事件中播放音频元素。我还尝试click()通过 React ref 上的元素伪造 a以最初激活它。两种解决方案都不起作用。

如果有消息进来,有没有办法自动播放音频元素?这一定是可能的,因为 YouTube 可以在没有交互的情况下自动播放视频。

每次尝试播放音频时,都会出现此错误:

Unhandled Rejection (NotAllowedError): The request is not allowed by the user agent or the platform in the current context, possibly because the user denied permission.
Run Code Online (Sandbox Code Playgroud)

javascript safari macos ios html5-audio

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

有没有一种免费使用Mapbox GL JS的方法?

我在服务器上托管了自己的地图图块。当我使用框架时,是否可以完全免费使用Mapbox GL JS,还是必须为此付费?他们的网站有点矛盾,一方面他们有一个定价,另一方面他们说这是一个免费的开源项目。所以我很困惑。

mapbox mapbox-gl mapbox-gl-js

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

暗模式:useColorScheme() 在 Android 上总是返回光

我正在尝试让暗模式工作,但它在 Android 上不起作用。它总是返回“光”。在 iOS 上它工作正常。

import React from 'react';
import { useColorScheme } from "react-native";

export default function App() {
  const theme = useColorScheme();
  alert("your color scheme is: " + theme); // always returns "light" on Android
  return null;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用 Expo SDK 42。

我把"userInterfaceStyle": "automatic"我的,app.json但它没有什么区别。

android react-native expo darkmode

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

Android:博览会通知在不活动后不会显示在锁定屏幕上

在 Android 上,我的 expo 应用程序在一定时间(如 3-5)不活动并且手机被锁定后不会显示通知(或者它们接收得很晚) 。

一旦我解锁手机,我就会立即收到待处理的通知!

当手机解锁时,所有通知都会正确接收,当我在前 3 分钟(左右)内重新锁定手机时,通知也会收到。不活动后,他们就不会出现。

我不确定这是否是某些 Android 设置(这种情况发生在三星 A9 和小米 Pocophone P1 上)还是我可以在我的应用程序中设置的东西......在iOS 上一切正常

您知道问题出在哪里吗?Facebook、Instagram 等其他应用程序运行良好。

android push-notification reactjs react-native expo

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

在Reacjs中导入另一个(帮助器)类

我想写一个像这样的助手类:

export default class A {
  constructor() {
    console.log(1);
  }
  test() {
    console.log(2);
  }
}
Run Code Online (Sandbox Code Playgroud)

我可以在我的组件中使用它:

import React, { Component } from "react";
import A from "./service/socket";

class Test extends Component {
  state = {
    counter: 0
  };

  componentDidMount = () => {
    A.test();
  };
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

javascript ecmascript-6 reactjs

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