广告
返回顶部
首页 > 资讯 > 精选 >Redux Hooks如何使用
  • 551
分享到

Redux Hooks如何使用

2023-07-04 14:07:48 551人浏览 独家记忆
摘要

这篇文章主要介绍“Redux Hooks如何使用”,在日常操作中,相信很多人在Redux Hooks如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redux Hooks如何使用”的疑惑有所帮助!接下来

这篇文章主要介绍“Redux Hooks如何使用”,在日常操作中,相信很多人在Redux Hooks如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redux Hooks如何使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Redux Hooks

Redux中Hooks介绍

在之前的redux开发中,为了让组件和redux结合起来,我们使用了React-redux库中的connect:

但是这种方式必须使用高阶函数结合返回的高阶组件;

并且必须编写:mapStateToProps和 mapDispatchToProps映射的函数。

在Redux7.1开始,提供了Hook的方式,在函数组件中再也不需要编写connect以及对应的映射函数了

useSelector的作用是将state映射到组件中:

参数一: 要求传入一个回调函数, 会将state传递到该回调函数中; 回调函数的返回值要求是一个对象, 在对象编写要使用的数据, 我们可以直接对这个返回的对象进行解构, 拿到我们要使用state中的数据

const { counter } = useSelector((state) => {  return {    counter: state.counter.counter  }})

参数二: 可以进行比较来决定是否组件重新渲染;

useSelector默认会比较我们返回的两个对象是否相等;

如何可以比较呢?

  • 在useSelector的第二个参数中, 传入react-redux库中的shallowEqual函数就可以进行比较

import { shallowEqual } from 'react-redux'const { counter } = useSelector((state) => ({  counter: state.counter.counter}), shallowEqual)

也就是我们必须返回两个完全相等的对象才可以不引起重新渲染;

useDispatch非常简单,就是调用useDispatch这个Hook, 就可以直接获取到dispatch函数,之后在组件中直接使用即可;

const dispatch = useDispatch()

我们还可以通过useStore来获取当前的store对象(了解即可, 不建议直接操作store对象);


Redux中Hooks使用

我们来使用Redux的Hooks在App组件实现一个计数器, 在App的子组件中实现一个修改message的案例:

首先我们先创建一个简单的store

// store/modules/counter.jsimport { createSlice } from "@reduxjs/toolkit";const counterSlice = createSlice({  name: "counter",  initialState: {    counter: 10,    message: "Hello World"  },  reducers: {    changeNumberAction(state, { payload }) {      state.counter = state.counter + payload    },    changeMessageAction(state,  {payload }) {      state.message = payload    }  }})export const { changeNumberAction, changeMessageAction } = counterSlice.actionsexport default counterSlice.reducer
// store/index.jsimport { configureStore } from "@reduxjs/toolkit";import counterSlice from "./modules/counter"const store = configureStore({  reducer: {    counter: counterSlice  }})export default store

要使用react-redux库需要导入Provider对App组件进行包裹

import React from "react"import ReactDOM from "react-dom/client"import { Provider } from "react-redux"import App from "./12_Redux中的Hooks/App"import store from "./12_Redux中的Hooks/store"const root = ReactDOM.createRoot(document.querySelector("#root"))root.render(  <Provider store={store}>    <App/>  </Provider>)

在组件时使用useSelector和useDispatch实现获取store中的数据和修改store中数据的操作

import React, { memo } from 'react'import { useDispatch, useSelector } from 'react-redux'import { changeMessageAction, changeNumberAction } from './store/modules/counter'// 子组件Homeconst Home = memo(() => {  console.log("Home组件重新渲染")    // 通过useSelector获取到store中的数据  const { message } = useSelector((state) => ({    message: state.counter.message  }))  // useDispatch获取到dispatch函数  const dispatch = useDispatch()  function changeMessage() {    dispatch(changeMessageAction("Hello ChenYq"))  }  return (    <div>      <h3>{message}</h3>      <button onClick={changeMessage}>修改message</button>    </div>  )})// 根组件Appconst App = memo(() => {  console.log("App组件重新渲染")    // 通过useSelector获取到store中的数据  const { counter } = useSelector((state) => ({    counter: state.counter.counter  }))  // useDispatch获取到dispatch函数  const dispatch = useDispatch()  function changeNumber(num) {    dispatch(changeNumberAction(num))  }    return (    <div>      <h3>当前计数: {counter}</h3>      <button onClick={() => changeNumber(1)}>+1</button>      <button onClick={() => changeNumber(-1)}>-1</button>      <Home/>    </div>  )})export default App

现在我们已经在组件中使用并且修改了了store中的数据, 但是现在还有一个小问题(性能优化)

当App组件中修改了counter时, App组件会重新渲染这个是没问题的; 但是Home组件中使用的是message, 并没有使用counter, 却也会重新渲染; 同样的在Home子组件中修改了message, 根组件App也会重新渲染; 这是因为在默认情况下useSelector是监听的整个state, 当state发生改变就会导致组件重新渲染

要解决这个问题就需要使用useSelector的第二个参数来控制是否需要重新渲染, 我们只需要在useSelector函数中传入react-redux库中的shallowEqual函数即可, 它内部会自动进行一个浅层比较, 当使用的state中的数据确实发生变化的时候才会重新渲染

import React, { memo } from 'react'import { useDispatch, useSelector, shallowEqual } from 'react-redux'import { changeMessageAction, changeNumberAction } from './store/modules/counter'// 子组件Homeconst Home = memo(() => {  console.log("Home组件重新渲染")  const { message } = useSelector((state) => ({    message: state.counter.message  }), shallowEqual)  const dispatch = useDispatch()  function changeMessage() {    dispatch(changeMessageAction("Hello ChenYq"))  }  return (    <div>      <h3>{message}</h3>      <button onClick={changeMessage}>修改message</button>    </div>  )})// 根组件Appconst App = memo(() => {  console.log("App组件重新渲染")  // 通过useSelector获取到store中的数据  const { counter } = useSelector((state) => ({    counter: state.counter.counter  }), shallowEqual)  // useDispatch获取到dispatch函数  const dispatch = useDispatch()  function changeNumber(num) {    dispatch(changeNumberAction(num))  }    return (    <div>      <h3>当前计数: {counter}</h3>      <button onClick={() => changeNumber(1)}>+1</button>      <button onClick={() => changeNumber(-1)}>-1</button>      <Home/>    </div>  )})export default App

到此,关于“Redux Hooks如何使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Redux Hooks如何使用

本文链接: https://www.lsjlt.com/news/345663.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Redux Hooks如何使用
    这篇文章主要介绍“Redux Hooks如何使用”,在日常操作中,相信很多人在Redux Hooks如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redux Hooks如何使用”的疑惑有所帮助!接下来...
    99+
    2023-07-04
  • 一文详解Redux Hooks的使用细节
    在Redux7.1开始,提供了Hook的方式,在函数组件中再也不需要编写connect以及对应的映射函数了useSelector的作用是将state映射到组件中:参数一: 要求传入一个回调函数, 会将state传递到该回调函数中;...
    99+
    2022-11-22
    Hooks Redux React
  • 如何使用Redux Toolkit简化Redux
    目录Redux Toolkit解决的问题它包括什么?Redux Toolkit API的主要功能?createSlice有什么特别之处?处理异步Redux流最后的想法了解Redux ...
    99+
    2022-11-12
  • React Hooks如何使用
    这篇文章主要介绍了React Hooks如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇React Hooks如何使用文章都会有所收获,下面我们一起来看看吧。hooks介绍在react...
    99+
    2023-07-05
  • 如何使用react-redux
    本文小编为大家详细介绍“如何使用react-redux”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何使用react-redux”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。...
    99+
    2022-10-19
  • React中如何使用Redux
    这篇文章主要讲解了“React中如何使用Redux”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“React中如何使用Redux”吧!Redux 是一种状态容器 JS 库,提供可预测的状态管理...
    99+
    2023-07-02
  • vue3中的hooks如何使用
    一、 什么是hookshook是钩子的意思,看到“钩子”是不是就想到了钩子函数?事实上,hooks 还真是函数的一种写法。vue3 借鉴 react hooks 开发出了 Composition API ,所以也就意味着 Compositi...
    99+
    2023-05-14
    Vue3 hooks
  • 如何使用ReduxToolkit简化Redux
    目录一、安装Redux Toolkit和React-Redux二、创建Redux Store三、在React中使用Redux Store四、创建一个Redux State Slice...
    99+
    2022-12-22
    Redux Toolkit Redux Toolkit原理
  • React项目中使用Redux的 react-redux
    目录背景UI 组件容器组件connect()mapStateToProps()mapDispatchToProps()组件实例:计数器背景 在前面文章一文理解Redux及其工作原理中...
    99+
    2022-11-13
  • React/Redux应用如何使用Async/Await
    小编给大家分享一下React/Redux应用如何使用Async/Await,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Asyn...
    99+
    2022-10-19
  • 如何在React中直接使用Redux
    React中使用Redux 开始之前需要强调一下,redux和react没有直接的关系,你完全可以在React, Angular, Ember, jQuery, or vanilla...
    99+
    2022-11-13
    React使用Redux React Redux用法
  • 在小程序里如何使用Redux
    这篇文章主要介绍在小程序里如何使用Redux,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在小程序里使用 Redux 进行状态管理, Redux 是一个前端状态管理的容器,对于...
    99+
    2023-06-26
  • ReactNative状态管理redux-toolkit如何使用
    今天小编给大家分享一下ReactNative状态管理redux-toolkit如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2023-07-05
  • react-redux及redux状态管理工具使用详解
    目录react-redux使用及原理1、下载 react-redux redux redux-thunk三个依赖包2、配置store对象,用来管理全局状态3、创建reducer.js...
    99+
    2023-01-31
    redux状态管理 react-redux状态管理
  • Redux Toolkit的基本使用示例详解(Redux工具包)
    目录Redux工具包的使用Redux Toolkit介绍Redux Toolkit基本使用Redux工具包的使用 Redux Toolkit介绍 Redux Toolkit 是官方推...
    99+
    2022-12-22
    Redux Toolkit使用 Redux 工具包
  • redux createStore如何创建
    今天小编给大家分享一下redux createStore如何创建的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1....
    99+
    2023-07-04
  • Hooks怎么封装与使用
    今天小编给大家分享一下Hooks怎么封装与使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Hooks是什么?本篇文章主要介...
    99+
    2023-07-04
  • React Hooks使用常见的坑
    React Hooks 是 React 16.8 引入的新特性,允许我们在不使用 Class 的前提下使用 state 和其他特性。React Hooks 要解决的问题是状态共享,是...
    99+
    2022-11-12
  • hooks怎么在react中使用
    hooks怎么在react中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。State Hooks案例:import { useState }&...
    99+
    2023-06-14
  • 怎么在React中使用Hooks
    这篇文章给大家介绍怎么在React中使用Hooks,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、State Hook1、基础用法function State(){  const&nbs...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作