当前位置: 首页 > 编程笔记 >

在React.js中使用useContext

双恩
2023-03-14
本文向大家介绍在React.js中使用useContext,包括了在React.js中使用useContext的使用技巧和注意事项,需要的朋友参考一下

useContext钩子允许在不使用redux的情况下将数据传递给子元素。

useContext是react中的一个命名导出,因此我们可以导入如下的功能组件-

import {useContext} from ‘react’;

如果我们只需要将数据传递给child元素,则它是Redux的简单替代方案。

创建上下文的简单示例

import React, { createContext } from ‘react’;
import ReactDOM from ‘react-dom’;
const MessageContext = createContext();
myApp=()=>{
   return (
      <MessageContext.Provider value=”hello”>
         <div>
            <Test/>
         </div>
      </MessageContext.Provider>
   );
}

在子组件Test中, 我们可以访问以下消息值-

Test =()=>{
   return (
      <MessageContext.Consumer >
         {value=><div> message : {value} </div> }
      </MessageContext.Consumer>
   );
}

请注意,我们尚未在子组件中传递道具。createContext挂钩为我们提供了提供者和使用者。

提供程序用于将值传递给子组件,并且子组件使用使用者使用值访问该值,如上所示。

这是一个简单的消费者示例,但在现实生活中,我们可能需要嵌套消费者。在这里,我们可以使用useContext以一种简单的方式编写它。

Import { useContext } from ‘react’;
Test =()=>{
   const messageValue=useContext(MessageContext);
   return (
      <div>Message: {messageValue} </div>
   );
}

我们消除了使用者代码,仅使用了useContext,它简化了代码,我们可以从具有提供者上下文值的多个父级获取值。现在,我们不需要嵌套多个使用者。

useMemo

useMemo帮助优化性能。它可以在每个渲染上执行,但前提是其中一个依赖项发生更改。与useEffect相似,我们为useMemo方法提供了第二个参数,我们可以将其称为依赖项。

useMemo( ()=>{}, [dependency input array]);

记住第一个函数中的计算,直到提供的依赖项不变为止。

如果我们有大量繁重的计算应执行一次,或者在输入之一发生更改时执行,则可以使用useMemo。

如果没有提供输入数组,它将在每个渲染器上执行。它用简单的词来优化繁重的计算。将来,高级编译器将自行决定依赖项数组。

我们可以替换useCallback,而仅使用以类似方式工作的useMemo。

useCallback(function, []);
useMemo(()=>function body, []);

它缓存函数值并返回相同的值,直到其中一个依赖项更改。

useReducer

顾名思义,useReducer与Redux中带有reducer功能的概念相似。

它接收到输入,并基于调度动作和值将为我们提供修改后的更新状态。

const [ state, dispatch]= useReducer((state, action)={
   switch(action.type){
      //根据动作类型和值进行计算
   }
},[]);

我们已经将第二个参数传递给useReducer,该参数可用于设置一些要声明的初始值。

一个更简单的例子

import React, { useReducer } from 'react';
function TestNumber() {
   const [total, dispatch] = useReducer((state, action) => {
      return state + action;
   }, 0);
   return (
      <>
         {total}
         <button onClick={() => dispatch(1)}>
            Add 1
         </button>
      </>
   );
}

在这里,我们已将状态初始化为0,并在每次单击按钮时递增。

在上面的示例中,我们也使用了react片段<>。

 类似资料:
  • 本文向大家介绍在React.js中使用原型,包括了在React.js中使用原型的使用技巧和注意事项,需要的朋友参考一下 道具的使用可确保在组件上接收道具的类型安全,还有助于进行正确的计算。 示例 -如果我们以字符串形式接收名称,以数字形式接收年龄,则应以相同的类型接收它。如果我们以字符串形式接收年龄,则可能导致计算错误。 要使用原型,我们必须安装以下软件包。 这个包由React Team提供。要在

  • 我有一个安装了ReactJS的NetCore2应用程序。 null VS代码抛出一个错误,告诉我异步只适用于。ts文件。另外,如果我在任何其他函数中使用await,我将得到一个错误,比如。 据我所知,async/await不仅仅是TS...(或者我错了?)。 谢了!

  • 本文向大家介绍在React.js中使用useState钩子,包括了在React.js中使用useState钩子的使用技巧和注意事项,需要的朋友参考一下 钩子允许功能组件在反应中获得基于类的组件中可用的特性,从而使它们更加强大。 useState,我们将从react导入。从'react'导入{useState}; 这有助于我们为功能组件创建局部状态变量,并提供更新该变量的方法。 类中的状态是一个对象

  • 本文向大家介绍在React.js功能组件中使用useEffect(),包括了在React.js功能组件中使用useEffect()的使用技巧和注意事项,需要的朋友参考一下 React钩子useEffect有助于在React的功能组件中添加componentDidUpdate和componentDidMount组合生命周期。 到目前为止,我们知道我们只能在有状态组件中添加生命周期方法。 要使用它,我

  • 问题内容: 以下 如何在React中与axios一起使用async / await 我试图在React.js应用程序中使用Async / Await向我的服务器发出一个简单的get请求。服务器加载一个简单的JSON ,看起来像这样 JSON格式 我可以使用简单的jquery ajax get方法将数据获取到我的React App。但是,我想利用axios库和Async / Await来遵循ES7标

  • 问题内容: 我从React.js开始,我想做一个简单的表格,但是在文档中我找到了两种方法。 在第一种是使用 参考文献 : 和第二个是使用 状态 内的阵营组分: 如果存在,我看不到这两种选择的优缺点。谢谢。 问题答案: 简短版本:避免引用。 它们不利于可维护性,并且失去了所见即所得模型渲染所提供的许多简单性。 您有一个表格。您需要添加一个按钮来重置表单。 参考: 操作DOM render描述了3分钟