首页
学习
活动
专区
圈层
工具
发布

前端高频react面试题

react component,组件把新的状态重新获取渲染,组件中也能主动发送action,创建action后这个动作是不会执行的,所以要dispatch这个action,让store通过reducers...如何解决 props 层级过深的问题使用Context API:提供一种组件之间的状态共享,而不必通过显式组件树逐层传递props;使用Redux等状态库。React Hook 的使用限制有哪些?...=id0的值也是1因为子元素相同,就不删除并更新,只做移动操作,这就提升了性能Redux 状态管理器和变量挂载到 window 中有什么区别两者都是存储数据以供后期使用。...但是这里有个点值得关注,执行 setState 的时候不一定会重新渲染。当 setState 传入 null 时,并不会触发 render。...一般可以用哪些值作为key最好使用每一条数据中的唯一标识作为key,比如:手机号,id值,身份证号,学号等也可以用数据的索引值(可能会出现一些问题)

4.2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    React总结概括

    setState会自动调用render函数,触发视图的重新渲染,如果仅仅只是state数据的变化而没有调用setState,并不会触发更新。...在这种假设之上进行逐层的比较,如果发现对应的节点是不同的,那就直接删除旧的节点以及它所包含的所有子节点然后替换成新的节点。如果是相同的节点,则只进行属性的更改。...2、getInitialState() 在使用es6的class语法时是没有这个钩子函数的,可以直接在constructor中定义this.state。此时可以访问this.props。...Provider是一个组件,它接受store作为props,然后通过context往下传,这样react中任何组件都可以通过contex获取store。...如果不相同则调用this.setState()触发Connect组件的更新,传入ui组件,触发ui组件的更新,此时ui组件获得新的props,react –> redux –> react 的一次流程结束

    1.5K20

    深入理解redux

    前沿 在使用 react 的过程中,通常我们会通过 props 将父组件的一些数据传递到子组件,兄弟组件传递数据通过一个共同的父级,子传父可以通过回调函数来进行传递,当然这都是比较理想的情况,业务中往往不可能仅仅这样简单...表面上的问题是解决了,但是使用 context 会存在一些问题 难以追踪数据流:因为 context 中的数据是能够被任何组件访问以及修改,所以大的项目中对于数据的更改或者流动不容易预测,开发过程中想要知道数据来源进行一些调试变的异常困难...,redux 的方式就是让整个应用使用一个 store,当然它不会阻止你创建多个 不能直接修改数据,改变只能靠纯函数,而纯函数就是 reducer reducer(state, action) => newState...action 仅仅是通过 type 来描述我们干了什么,然后通过 reducer 返回一个新的 state,最后触发 订阅的回调函数,打印出来最新的 store 值 这个时候你会发现 redux 是可以独立使用的...redux 的三个原则:单一数据源、状态是只读的、使用纯函数来执行状态更改。文章描述了如何应用它们以及它们的好处。

    98050

    如何在 React 应用中使用 Hooks、Redux 等管理状态

    如何使用 useReducer hook 当你使用 useState 时,要设置的新状态取决于先前的状态(如我们的计数示例),或者当我们的应用程序中状态更改非常频繁,这种情况下可能会出现另一个问题。...在 Redux 中,store 是拥有所有应用程序状态信息的实体。多亏 Redux,我们能够从任何想要的组件中访问 store(就像使用 context 一样)。...Redux toolkit 基于两件事: store,它的工作方式与普通 Redux store 完全相同 slices 将普通的 Redux actions 和 reducer 压缩成一个单一的东西...你只需要指定一个初始值,它可以是原始值,如字符串和数字、对象和数组。然后在你的组件中使用该 atom,在每次 atom 更改时该组件将重新渲染。...使用 store 的方式与 Redux 类似,但不同之处在于,在 Zusand 中,store 是一个 hook,它需要的模板要少得多。

    9.6K20

    必须要会的 50 个React 面试题(下)

    通过 props 获取当前值,然后通过回调通知更改 3. Refs 用于获取其当前值 30. 什么是高阶组件(HOC)? 高阶组件是重用组件逻辑的高级方法,是一种源于 React 的组件模式。...HOC 是自定义组件,在它之内包含另一个组件。它们可以接受子组件提供的任何动态,但不会修改或复制其输入组件中的任何行为。你可以认为 HOC 是“纯(Pure)”组件。 31. 你能用HOC做什么?...使用 Redux 开发的应用易于测试,可以在不同环境中运行,并显示一致的行为。 37. Redux遵循的三个原则是什么? 单一事实来源:整个应用的状态存储在单个 store 中的对象/状态树里。...就像 state 是数据的最小表示一样,该操作是对数据更改的最小表示。 使用纯函数进行更改:为了指定状态树如何通过操作进行转换,你需要纯函数。纯函数是那些返回值仅取决于其参数值的函数。 ?...它根据操作的类型确定需要执行哪种更新,然后返回新的值。如果不需要完成任务,它会返回原来的状态。 43. Store 在 Redux 中的意义是什么?

    4.3K21

    Redux原理分析以及使用详解(TS && JS)

    某个组件的状态,需要共享 某个状态需要在任何地方都可以拿到 一个组件需要改变全局状态 一个组件需要改变另一个组件的状态 1.2、为什么要用Redux 在React中,数据在组件中是单向流动的,这是react...而不是直接通知其他组件,组件内部通过订阅 store 中的状态 state 来刷新自己的视图 1.4、Redux是什么?...('root') ); 6.2、在组件中取出store仓库的值,和如果触发action(JS && TS + hooks) 6.2.1、JS的用法(取值以及触发action) import React,...首先我们在组件当中使用redux,就需要使用react- redux中的connect将该组件与store连接起来,而connect又可以接受两个参数,分别是mapStateToProps和mapDispatchToProps...从React页面渲染来说:页面肯定是先渲染,不会关心dispatch,也不会关心action,只会关心我store里面数据的变化,其实也就是我第一次useEffect的时候,数据取得其实是初始值。

    5.7K30

    React进阶(4)-拆分Redux-将store,Reducer,action,actionTypes独立管理

    撰文 | 川川 前言 撰文:川川 在前面的几小节中已经完成了一个todolist的添加,删除的操作,通过把组件的数据放到了Redux中的公共存储区域store中去存储,在Redux中进行状态数据的更新修改...改变store的数据唯一办法就是派发action,调用store.dispatch方法,也知道通过getState方法获取store中的所有状态数据,而实现组件页面的更新与store保持同步,必须得触发注册...(动作类型)都是放在一个文件当中进行编写的,然而更改store可能有多个action动作,所有代码杂糅在一起,后期维护起来显然是非常痛苦的 所以有必要进行将Redux代码进行按照特定的职责,功能结构进行拆分的...') { // 这个必须要与上面定义相同 // 对原有的上一次的state做一次深拷贝,在Redux中,reducer不允许直接修改state // const newState...里面的type类型值都更改成常量,放到一个文件(actionTypes.js)去管理的,这个文件只用于定义动作action类型的常量 因为上面的代码中的action有三个:所以完整的如下所示 const

    2K10

    使用React Hooks进行状态管理 - 无Redux和Context API

    但是,您可以选择仅在某些值发生更改时触发它,并将一个数组作为第二个可选参数传递。 ? 要获得与 componentDidMount() 相同的结果,我们可以发送一个空数组。...空数组不会改变,useEffect只会运行一次。 共享states 我们可以看到Hooks状态与类组件状态完全相同。组件的每个实例都有自己的状态。...为了组件之间共享状态,我们将创建一个自定义Hook。 ? 这个想法是创建一个监听器数组,只有一个状态对象。每当一个组件更改状态时,所有订阅的组件都会触发其 setState() 函数并进行更新。...但是,如果第一个参数中使用的函数返回另一个函数,则第二个函数将在卸载组件之前触发。完全像 componentWillUnmount()。 这是从监听器数组中删除组件的理想位置。 ?...因为我们现在有一个更通用的Hook,我们必须在store文件中设置它。 ? 将actions与组件分开 如果您曾经使用过复杂的状态管理库,那么您就知道直接在组件中操作全局状态并不是最好的做法。

    5.6K20

    从0实现一个mini redux

    ,在 react 中,它解决的是多个组件之间的通信问题 在没有使用 redux 的情况下,如果两个组件(非父子关系)之间需要通信的话,可能需要多个中间组件来为他们进行消息传递,这样既浪费了资源,代码也会变得更复杂...redux 提出了单一数据源 store 来存储状态数据,所有的组件都可以通过 action 来修改 store,也可以从 store 中获取最新状态。...使用了 redux 就可以完美解决组件之间的通信问题 redux 的设计原则 redux 的三大设计原则: 单一数据源 状态是只读的 使用纯函数编写 reducer 单一数据源 意思是整个 react...项目里的 state 都存放在一起,单一数据源主要是为了解决状态一致性的问题 在传统的 MVC 架构中,需要创建无数个 Model,而 Model 之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在...函数的返回结果只依赖其参数,并且执行过程中不会产生副作用 ❞ 在 redux 中,我们通过定义 reducer 来更改状态,每个 reducer 都是纯函数,这意味着它没有副作用,相同的输入必定有相同的输出

    79720

    React进阶(4)-拆分Redux-将store,Reducer,action,actionTypes独立管理

    image.png 前言 在前面的几小节中已经完成了一个todolist的添加,删除的操作,通过把组件的数据放到了Redux中的公共存储区域store中去存储,在Redux中进行状态数据的更新修改...改变store的数据唯一办法就是派发action,调用store.dispatch方法,也知道通过getState方法获取store中的所有状态数据,而实现组件页面的更新与store保持同步,必须得触发注册...(动作类型)都是放在一个文件当中进行编写的,然而更改store可能有多个action动作,所有代码杂糅在一起,后期维护起来显然是非常痛苦的 所以有必要进行将Redux代码进行按照特定的职责,功能结构进行拆分的...{ // 这个必须要与上面定义相同 // 对原有的上一次的state做一次深拷贝,在Redux中,reducer不允许直接修改state // const newState...里面的type类型值都更改成常量,放到一个文件(actionTypes.js)去管理的,这个文件只用于定义动作action类型的常量 因为上面的代码中的action有三个:所以完整的如下所示 const

    2.2K11

    Mobx与Redux的异同

    他们都遵循单一数据源的原则,这让我们更容易推断状态的值和状态的修改。当然他们并不一定要跟React绑定在一起,它们也可以在AngularJs和VueJs这些框架库里使用。...随着应用功能的不断拓展,通常会出现一些问题: 一个组件通常需要和另一个组件共享状态。 一个组件需要改变另一个组件的状态。 组件层级太深,需要共享状态时状态要层层传递。...通常只要将组件作为连接组件,就可以在组件层级的任何地方得到和更改状态。...store管理方式 在Redux应用中通常将整个应用的state被储存在一棵object tree中,并且这个object tree只存在于唯一一个store中。...在Mobx使用可观察对象,通常是使用observable让数据的变化可以被观察,通过把属性转化成getter/setter来实现,当数据变更时将自动触发监听响应。

    1.1K20

    前端开发常见面试题,有参考答案

    来更新你的组件状态,旧的属性还是可以通过this.props来获取,这里调用更新状态是安全的,并不会触发额外的render调用。...componentWillReceiveProps在初始化render的时候不会执行,它会在Component接受到新的状态(Props)时被触发,一般用于父组件状态更新时子组件的重新渲染。...state 的管理在大项目中相当复杂。Redux 提供了一个叫 store 的统一仓储库,组件通过 dispatch 将 state 直接传入store,不用通过其他的组件。...使用了 Redux,所有的组件都可以从 store 中获取到所需的 state,他们也能从store 获取到 state 的改变。这比组件之间互相传递数据清晰明朗的多。...什么是受控组件和非受控组件受控组件: 没有维持自己的状态 数据由付组件控制 通过props获取当前值,然后通过回调函数通知更改非受控组件 保持这个自己的状态 数据有DOM控制 refs用于获取其当前值

    1.7K20

    一文梭穿Vuex、Flux、Redux、Redux-saga、Dva、MobX

    比如一个组件需要使用另一个组件的状态,或者一个组件需要改变另一个组件的状态,都是共享状态。...b; } 这个函数也有副作用,就是依赖外部的环境,b 在别处被改变了,返回值对于相同的 a 就有可能不一样。...而 Reducer 是一个纯函数,对于相同的输入,永远都只会有相同的输出,不会影响外部的变量,也不会被外部变量影响,不得改写参数。...映射就是把一个列表按照一定规则映射成另一个列表,而 reduce 是把一个列表通过一定规则进行合并,也可以理解为对初始值进行一系列的操作,返回一个新的值。...Mutation 显而易见,State 不能直接改,需要通过一个约定的方式,这个方式在 Vuex 里面叫做 mutation,更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。

    5.9K10

    状态管理的概念,都是纸老虎

    比如一个组件需要使用另一个组件的状态,或者一个组件需要改变另一个组件的状态,都是共享状态。...b; } 这个函数也有副作用,就是依赖外部的环境,b 在别处被改变了,返回值对于相同的 a 就有可能不一样。...而 Reducer 是一个纯函数,对于相同的输入,永远都只会有相同的输出,不会影响外部的变量,也不会被外部变量影响,不得改写参数。...映射就是把一个列表按照一定规则映射成另一个列表,而 reduce 是把一个列表通过一定规则进行合并,也可以理解为对初始值进行一系列的操作,返回一个新的值。...Mutation 显而易见,State 不能直接改,需要通过一个约定的方式,这个方式在 Vuex 里面叫做 mutation,更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。

    5.6K20

    Redux初学者入门解析

    在标准的MVC框架中,数据可以在UI组件和存储之间双向流动,而Redux严格限制了数据只能在一个方向上流动。...store本质上是一个状态树,保存了所有对象的状态。任何UI组件都可以直接从store访问特定对象的状态。要通过本地或远程组件更改状态,需要分发一个action。...某个组件的状态,需要共享 某个状态需要在任何地方都可以拿到 一个组件需要改变全局状态 一个组件需要改变另一个组件的状态 Redux设计思想 (1)Web 应用是一个状态机,视图与状态是一一对应的。...其他运算的逻辑(比如减法),也可以根据 Action 的不同来实现。 实际应用中,Reducer 函数不用像上面这样手动调用,store.dispatch方法会触发 Reducer 的自动执行。...如果使用的是 React,这时可以触发重新渲染 View。

    74020

    从 0 实现一个 mini redux

    ,在 react 中,它解决的是多个组件之间的通信问题 在没有使用 redux 的情况下,如果两个组件(非父子关系)之间需要通信的话,可能需要多个中间组件来为他们进行消息传递,这样既浪费了资源,代码也会变得更复杂...redux 提出了单一数据源 store 来存储状态数据,所有的组件都可以通过 action 来修改 store,也可以从 store 中获取最新状态。...使用了 redux 就可以完美解决组件之间的通信问题 redux 的设计原则 redux 的三大设计原则: 单一数据源 状态是只读的 使用纯函数编写 reducer 单一数据源 意思是整个 react...项目里的 state 都存放在一起,单一数据源主要是为了解决状态一致性的问题 在传统的 MVC 架构中,需要创建无数个 Model,而 Model 之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在...,并且执行过程中不会产生副作用 在 redux 中,我们通过定义 reducer 来更改状态,每个 reducer 都是纯函数,这意味着它没有副作用,相同的输入必定有相同的输出 ps:修改外部的变量、调用

    56030

    React和Redux——状态管理Flux和Redux

    存在的问题 1、数据重复以及数据不一致的问题 不同的组件之间在数据上如果存在依赖关系,则在不同的组件中可能都各自维护着相同的数据或者一个组件的数据可以根据另一个组件的数据计算得到,这就存在了数据重复的问题...当Store中的状态改变的时候,将会触发添加在监听器上的回调函数this.onChange(),一般我们在该回调函数中调用this.state方法修改组件的内部状态触发组件的重新渲染。...store; 使用Redux的createStore方法创建全局唯一的Store对象,可以带三个参数按顺序分别用于规约的Reducer、初始值和Store enhancer增强器。...使用Store的subscribe和unsubscribe方法在组件挂载和取消挂载时绑定和解绑回调函数,回调函数将会重新获取Store中最新的状态值并且使用this.setState修改组件内部的状态值触发组件渲染...总结 使用Redux对应用中的状态进行管理,首先使用Redux中Store提供的subscribe和unsubscribe方法在组件的生命周期内监听Store的更新并及时将Store中的最新状态通过this.setState

    2.3K80

    react-redux 开发实践与学习分享

    在各大框架中均可使用,当然各个框架也有自己再度封装的状态管理库,如angular的ngrx,vue的vuex,而本文主要介绍的是react的react-redux。 示例介绍 ?...redux中的所有状态值连接起来。...为了方便快速理解,我们可以简单粗暴的认为他是js中getter,setter中的getter,这是一个用来从redux中获取值的函数,这个函数返回的值,可以在当前组件的props中拿到。...因为在主页面只会取值,而不会设置值,因此connect只需要这一个函数足够。 ownProps这里还可以穿第二个参数,第二个参数特指当前组件的props,可以用来做信息对比。本例没有用到。...在mapStateToProps这个取值函数中,取的也就是相关reducer中返回的值。 触发相关action后的主页控制台: ?

    1.3K30

    React面试八股文(第一期)

    当然,它就是redux-persist。redux-persist会将redux的store中的数据缓存到浏览器的localStorage中。...forceUpdate 时并不会触发此方法,此方法仅用于性能优化。...使用了 Redux,所有的组件都可以从 store 中获取到所需的 state,他们也能从store 获取到 state 的改变。这比组件之间互相传递数据清晰明朗的多。...方法更新state,就会触发视图的重新渲染,完成表单组件的更新受控组件缺陷: 表单元素的值都是由React组件进行管理,当有多个输入框,或者多个这种组件时,如果想同时获取到全部的值就必须每个都要编写事件处理函数...万一下次别人要移除它,就得去 mixin 中查找依赖多个 mixin 中可能存在相同命名的函数,同时代码组件中也不能出现相同命名的函数,否则就是重写了,其实我一直觉得命名真的是一件麻烦事。。

    4K30
    领券