重温react-11(userMemo和useContext的使用方式)

userMemo

import React, { useState, useMemo } from 'react'

export default function LearnFunction08() {
  const [num1] = useState(0);
  const [num2, setNum2] = useState(0);
  const [num3, setNum3] = useState(0);
  const number = useMemo(() => {
    console.log('调用了吗');
    return num1 + num2;
  }, [num1, num2])  //这个后面定义的是依赖,只有num1和num2发生改变时,这个才会调用,函数组件是只要数据发生改变整个函数都会重新调用,但是使用useMemo后是不会进行调用的
  // 类似于vue中的计算属性
  return (
    <div>
      {num1}
      <br />
      <button onClick={() => {
        setNum2(num2 + 1);
      }}>+</button>
      <br />
      <div>
        num1 +num2 =
        {number}
      </div>
      <button onClick={() => {
        setNum3(num3 + 1);
      }}>+</button>
      {num3}
    </div>
  )
}

const number = useMemo(() => {

    console.log('调用了吗');

    return num1 + num2;

  }, [num1, num2])

这个后面定义的是依赖,只有num1和num2发生改变时,这个才会调用,函数组件是只要数据发生改变整个函数都会重新调用,但是使用useMemo后是不会进行调用的.

类似于vue中的计算属性.

useContext

index.js中的代码

import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import { Provider } from './context/index';
import reportWebVitals from './reportWebVitals';

const root = ReactDOM.createRoot(document.getElementById('root'));
const data = {
  name: 'John Doe',
  age: 30,
  hobbies: ['reading', 'painting', 'traveling']
}
root.render(
  <React.StrictMode>
    <Provider value={data}>
      <App />
    </Provider>
  </React.StrictMode>
);
reportWebVitals();

context.js中的代码

import { createContext } from "react";
const Context = createContext();

// Context有两个属性
//    1. Provider 数据提供者
//    2. Consumer 数据使用者

const { Provider, Consumer } = Context;
export {
    Context,
    Provider,
    Consumer
}

相比于类组件中,这个直接导出Context.

09中使用useContext的hook来获取index.js中传过来的参数

import React, { useContext } from 'react'
import { Context } from './context/index'
export default function LearnFunction09() {
  console.log(useContext(Context));
  // 直接传入Context的值即可
  // 这样就可拿到传过来的值,此时09是数据使用者
  return (
    <div>LearnFunction09</div>
  )
}

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苦逼的猿宝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值