React 新版官方文档 (一) useReducer 用法详解

这篇具有很好参考价值的文章主要介绍了React 新版官方文档 (一) useReducer 用法详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

React 新版官方文档 (一) useReducer 用法详解,react.js,javascript,前端,typescript,vue.js

useReducer

useReducer 是一个可以让你向组件中添加 reducer 的 Hook

const [state, dispatch] = useReducer(reducer, initialArg, init?)

基本用法

const reducer = (state, action) => {
...
}
const MyComponent = () => {
    const [state, dispatch] = useReducer(reducer, {age: 42})
    const handleClick = () => {
        dispatch({type:'increase'})
    }
   ...
}

比 useState 多了一个处理函数,该函数可以根据不同的分发状态来对应的改变状态

注意:state 不可修改 不能这样写, reducer 函数应当返回一个新对象

function reducer(state, action) {
  switch (action.type) {
    case 'incremented_age': {
      // 🚩 Don't mutate an object in state like this:
      state.age = state.age + 1;
      return state;
    }
function reducer(state, action) {
  switch (action.type) {
    case 'incremented_age': {
      // ✅ Instead, return a new object
      return {
        ...state,
        age: state.age + 1
      };
    }
    

不要重新执行初始函数 第一种写法会导致每次渲染时候都调用 createInitialState 函数 造成性能浪费

function createInitialState(username) {
  // ...
}
// ❌
function TodoList({ username }) {
  const [state, dispatch] = useReducer(reducer, createInitialState(username));
  
// ✅
function TodoList({ username }) {
  const [state, dispatch] = useReducer(reducer, username, createInitialState);
  // ...

dispatch 后如何使用最新的状态值

调用 dispatch 函数不会更改运行代码中的状态 ,使用最新的状态值应该是这样写文章来源地址https://www.toymoban.com/news/detail-545783.html

function handleClick() {
  console.log(state.age);  // 42

  dispatch({ type: 'incremented_age' }); // Request a re-render with 43
  console.log(state.age);  // Still 42!

  setTimeout(() => {
    console.log(state.age); // Also 42!
  }, 5000);
}

const action = { type: 'incremented_age' };
dispatch(action);
const nextState = reducer(state, action);
console.log(state);     // { age: 42 }
console.log(nextState); // { age: 43 }

参考

  • https://react.dev/reference/react/useReducer

到了这里,关于React 新版官方文档 (一) useReducer 用法详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • React js原生 详解 HTML 拖放 API(鼠标拖放(拖动)功能)

    最近碰到了个需求,大概就是要通过可视化拖拽的方式配置一个冰柜,需要把预设好的冰柜内部架子模板一个个拖到冰箱内。一开始的想法是用鼠标事件(mousedown、mouseup等)那一套去实现,能实现但是过程过于复杂,需要控制的状态太多了。其实 Web Api 为 html 元素拖拽量身定

    2024年01月22日
    浏览(47)
  • React井字棋游戏官方示例

    在本篇技术博客中,我们将介绍一个React官方示例:井字棋游戏。我们将逐步讲解代码实现,包括游戏的组件结构、状态管理、胜者判定以及历史记录功能。让我们一起开始吧! 在这个井字棋游戏中,我们有以下组件: Square 组件:表示游戏棋盘上的每一个方格。 Board 组件:

    2024年02月14日
    浏览(36)
  • llama_index 官方文档阅读笔记 (持续更新版)

    链接: LlamaIndex 🦙 v0.10.17 LlamaIndex 是一个基于 LLM 的应用程序的数据框架,它受益于上下文增强。 这种LLM系统被称为RAG系统,代表“检索-增强生成” 。 LlamaIndex 提供了必要的抽象,以便更轻松地摄取、构建和访问私有或特定于域的数据,以便将这些数据安全可靠地注入 L

    2024年04月10日
    浏览(36)
  • 【React】forwardRef 用法

    forwardRef :允许你的组件使用 ref 将一个 DOM 节点暴露给父组件。 案例分析:ref 属性是 React 的特殊属性,不能直接使用。 上面就会弹出报错信息: 如果想传递 ref,这时候就要借助 forwardRef 函数

    2024年02月11日
    浏览(32)
  • React的jsx的用法

    React是一个流行的JavaScript库,用于构建用户界面。它使用一种名为JSX的语法扩展来描述组件的结构和样式。JSX是React的核心语言之一,它允许开发人员在JavaScript中编写HTML,从而使代码更加简洁和易于阅读。 JSX是一种语法扩展 ,它允许开发人员在JavaScript中编写类似于HTML的代

    2024年02月10日
    浏览(48)
  • [React] useRef用法和特性

    一般在使用react-hook的时候,我们用到最多的就是定义变量,以及对应的修改变量 下面是一个最基本的 react-hook 应用程序 以上并不是以使用useState的方式来进行对useRef的衬托,两者功能是不同的,只是便于区分 但是如果我想让浏览器渲染的时候,让他的次数自增,这样就会有

    2024年02月01日
    浏览(38)
  • React-hooks有哪些用法?

    React Hooks 是 React 16.8 引入的一种新的特性,用于在函数组件中使用状态和其他 React 特性。下面列举了一些常见的 React Hooks 的用法: 1:useState:用于在函数组件中添加状态。: 2:useEffect:用于在函数组件中执行副作用操作(如订阅、数据获取等)。

    2024年02月08日
    浏览(37)
  • react中的useState和useImmer的用法

    react中文官网教程 在函数式组件中,可以使用 useState 这个 Hook 来定义和管理组件的状态。 useState 接受一个初始状态作为参数,并返回一个包含 state 和更新 state 的方法的数组。 下面是一个例子,展示了如何在函数式组件中定义自己的 state: 在上面的例子中,我们使用 useStat

    2024年02月07日
    浏览(42)
  • 章节 1:入门React.js -《React.js手把手教程:从初学者到实战高手》- 第一部分:React.js基础

    《React.js手把手教程:从初学者到实战高手》 第一部分:React.js基础 在我们开始探索 React.js 的奇妙世界之前,让我们先来认识一下这个“ 人人都在谈论 ”的家伙。你可以把 React.js 想象成是一个全栈工程师的一大碗甜品,不仅好吃,还可以让你的应用更美味!那么,究竟什么

    2024年02月11日
    浏览(53)
  • React hooks文档笔记(四) useRef

    当想让组件记住一些信息,又不想触发新的渲染,可以使用ref:总是返回同一个对象。 1. state 和 refs 的比较 refs(普通的 JavaScript 对象) state 更改时 不触发重新渲染 更改时 触发重新渲染 可变的——修改/更新 current ’s value (修改完立即生效  ref.current = 5;    console.log(ref

    2024年02月12日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包