React
React相关问题
LuckXinXin
加油
展开
-
React常考知识点--事件机制
React 其实自己实现了一套事件机制,首先我们考虑一下以下代码:const Test = ({ list, handleClick }) => ({ list.map((item, index) => ( <span onClick={handleClick} key={index}>{index}</span> ))})以上类似代码想必大家经常会写到,但是你是否考虑过点击事件是否绑定在了每一个标签上?事实当然不是,JSX.原创 2020-12-10 14:15:41 · 82 阅读 · 0 评论 -
React常考知识点--HOC 是什么?相比 mixins 有什么优点?
很多人看到高阶组件(HOC)这个概念就被吓到了,认为这东西很难,其实这东西概念真的很简单,我们先来看一个例子。function add(a, b) { return a + b}现在如果我想给这个 add 函数添加一个输出结果的功能,那么你可能会考虑我直接使用 console.log 不就实现了么。说的没错,但是如果我们想做的更加优雅并且容易复用和扩展,我们可以这样去做function withLog (fn) { function wrapper(a, b) { .原创 2020-12-10 14:15:23 · 431 阅读 · 0 评论 -
React常考知识点--通信
父子通信父组件通过 props 传递数据给子组件,子组件通过调用父组件传来的函数传递数据给父组件,这两种方式是最常用的父子通信实现办法。这种父子通信方式也就是典型的单向数据流,父组件通过 props 传递数据,子组件不能直接修改 props, 而是必须通过调用父组件函数的方式告知父组件修改数据。兄弟组件通信对于这种情况可以通过共同的父组件来管理状态和事件函数。比如说其中一个兄弟组件调用父组件传递过来的事件函数修改父组件中的状态,然后父组件将状态传递给另一个兄弟组件跨多层次组件通信如果你原创 2020-12-10 14:15:12 · 88 阅读 · 0 评论 -
React常考知识点--性能优化
在 shouldComponentUpdate 函数中我们可以通过返回布尔值来决定当前组件是否需要更新。这层代码逻辑可以是简单地浅比较一下当前 state 和之前的 state 是否相同,也可以是判断某个值更新了才触发组件更新。一般来说不推荐完整地对比当前 state 和之前的 state 是否相同,因为组件更新触发可能会很频繁,这样的完整对比性能开销会有点大,可能会造成得不偿失的情况。当然如果真的想完整对比当前 state 和之前的 state 是否相同,并且不影响性能也是行得通的,可以通过 immu.原创 2020-12-10 14:15:03 · 103 阅读 · 0 评论 -
React常考知识点--setState
setState 在 React 中是经常使用的一个 API,但是它存在一些的问题经常会导致初学者出错,核心原因就是因为这个 API 是异步的。首先 setState 的调用并不会马上引起 state 的改变,并且如果你一次调用了多个 setState ,那么结果可能并不如你期待的一样。handle() { // 初始化 `count` 为 0 console.log(this.state.count) // -> 0 this.setState({ count: this.sta.原创 2020-12-10 14:14:53 · 107 阅读 · 0 评论 -
那给我介绍一下React
以前我们没有jquery的时候,我们大概的流程是从后端通过ajax获取到数据然后使用jquery生成dom结果然后更新到页面当中,但是随着业务发展,我们的项目可能会越来越复杂,我们每次请求到数据,或则数据有更改的时候,我们又需要重新组装一次dom结构,然后更新页面,这样我们手动同步dom和数据的成本就越来越高,而且频繁的操作dom,也使我我们页面的性能慢慢的降低。这个时候mvvm出现了,mvvm的双向数据绑定可以让我们在数据修改的同时同步dom的更新,dom的更新也可以直接同步我们数据的更改,这个特定可.原创 2020-08-30 19:15:01 · 148 阅读 · 0 评论 -
React 的渲染过程中,兄弟节点之间是怎么处理的?也就是key值不一样的时候
通常我们输出节点的时候都是map一个数组然后返回一个ReactNode,为了方便react内部进行优化,我们必须给每一个reactNode添加key,这个key prop在设计值处不是给开发者用的,而是给react用的,大概的作用就是给每一个reactNode添加一个身份标识,方便react进行识别,在重渲染过程中,如果key一样,若组件属性有所变化,则react只更新组件对应的属性;没有变化则不更新,如果key不一样,则react先销毁该组件,然后重新创建该组件...原创 2020-08-29 13:45:58 · 406 阅读 · 0 评论 -
React 的虚拟dom是怎么实现的
首先说说为什么要使用Virturl DOM,因为操作真实DOM的耗费的性能代价太高,所以react内部使用js实现了一套dom结构,在每次操作在和真实dom之前,使用实现好的diff算法,对虚拟dom进行比较,递归找出有变化的dom节点,然后对其进行更新操作。为了实现虚拟DOM,我们需要把每一种节点类型抽象成对象,每一种节点类型有自己的属性,也就是prop,每次进行diff的时候,react会先比较该节点类型,假如节点类型不一样,那么react会直接删除该节点,然后直接创建新的节点插入到其中,假如节点类型.原创 2020-08-29 13:45:42 · 213 阅读 · 0 评论 -
我现在有一个button,要用react在上面绑定点击事件,要怎么做?
class Demo { render() { return <button onClick={(e) => { alert('我点击了按钮') }}> 按钮 </button> }}你觉得你这样设置点击事件会有什么问题吗?由于onClick使用的是匿名函数,所有每次重渲染的时候,会把该onClick当做一个新的prop来处理,会将内部缓存的onClick事件进行重新赋值,所以相对直接使用函数来说,可能有一点的原创 2020-08-29 13:45:18 · 883 阅读 · 0 评论 -
说说你用react有什么坑点?
JSX做表达式判断时候,需要强转为boolean类型如果不使用 !!b 进行强转数据类型,会在页面里面输出 0。render() { const b = 0; return <div> { !!b && <div>这是一段文本</div> } </div>}尽量不要在 componentWillReviceProps 里使用 setState,如果一定要使用,那么需要判断结束条件,不.原创 2020-08-28 11:22:17 · 409 阅读 · 0 评论 -
简述flux 思想
Flux 的最大特点,就是数据的"单向流动"。用户访问 ViewView发出用户的 ActionDispatcher 收到Action,要求 Store 进行相应的更新Store 更新后,发出一个"change"事件View 收到"change"事件后,更新页面原创 2020-08-28 11:22:02 · 682 阅读 · 0 评论 -
React性能优化方案
重写shouldComponentUpdate来避免不必要的dom操作使用 production 版本的react.js使用key来帮助React识别列表中所有子组件的最小变化原创 2020-08-28 11:21:42 · 319 阅读 · 0 评论 -
diff算法?
把树形结构按照层级分解,只比较同级元素。给列表结构的每个单元添加唯一的key属性,方便比较。React 只会匹配相同 class 的 component(这里面的class指的是组件的名字)合并操作,调用 component 的 setState 方法的时候, React 将其标记为 - dirty.到每一个事件循环结束, React 检查所有标记 dirty的 component重新绘制.选择性子树渲染。开发人员可以重写shouldComponentUpdate提高diff的性能...原创 2020-08-27 10:24:21 · 253 阅读 · 0 评论 -
为什么虚拟dom会提高性能
虚拟dom相当于在js和真实dom中间加了一个缓存,利用dom diff算法避免了没有必要的dom操作,从而提高性能具体实现步骤如下用 JavaScript 对象结构表示 DOM 树的结构;然后用这个树构建一个真正的 DOM 树,插到文档当中当状态变更的时候,重新构造一棵新的对象树。然后用新的树和旧的树进行比较,记录两棵树差异把2所记录的差异应用到步骤1所构建的真正的DOM树上,视图就更新...原创 2020-08-27 10:23:53 · 767 阅读 · 0 评论 -
react性能优化是哪个周期函数
shouldComponentUpdate 这个方法用来判断是否需要调用render方法重新描绘dom。因为dom的描绘非常消耗性能,如果我们能在shouldComponentUpdate方法中能够写出更优化的dom diff算法,可以极大的提高性能原创 2020-08-27 10:23:22 · 919 阅读 · 0 评论 -
react生命周期函数
初始化阶段getDefaultProps:获取实例的默认属性getInitialState:获取每个实例的初始化状态componentWillMount:组件即将被装载、渲染到页面上render:组件在这里生成虚拟的DOM节点omponentDidMount:组件真正在被装载之后运行中状态componentWillReceiveProps:组件将要接收到属性的时候调用shouldComponentUpdate:组件接受到新属性或者新状态的时候(可以返回false,接收数据后不更新,阻止原创 2020-08-26 09:50:50 · 116 阅读 · 0 评论 -
react组件的划分业务组件技术组件?
根据组件的职责通常把组件分为UI组件和容器组件。UI 组件负责 UI 的呈现,容器组件负责管理数据和逻辑。两者通过React-Redux 提供connect方法联系起来原创 2020-08-26 09:50:38 · 747 阅读 · 0 评论 -
redux有什么缺点
一个组件所需要的数据,必须由父组件传过来,而不能像flux中直接从store取。当一个组件相关数据更新时,即使父组件不需要用到这个组件,父组件还是会重新render,可能会有效率影响,或者需要写复杂的shouldComponentUpdate进行判断。...原创 2020-08-26 09:50:26 · 860 阅读 · 1 评论 -
redux中间件
中间件提供第三方插件的模式,自定义拦截 action -> reducer 的过程。变为 action -> middlewares -> reducer。这种机制可以让我们改变数据流,实现如异步action ,action 过滤,日志输出,异常报告等功能...原创 2020-08-25 10:38:34 · 114 阅读 · 0 评论 -
createElement 与 cloneElement 的区别是什么
createElement 函数是 JSX 编译之后使用的创建 React Element 的函数,而 cloneElement 则是用于复制某个元素并传入新的 Props原创 2020-08-25 10:38:13 · 353 阅读 · 0 评论 -
概述下 React 中的事件处理逻辑
为了解决跨浏览器兼容性问题,React 会将浏览器原生事件(Browser Native Event)封装为合成事件(SyntheticEvent)传入设置的事件处理器中。这里的合成事件提供了与原生事件相同的接口,不过它们屏蔽了底层浏览器的细节差异,保证了行为的一致性。另外有意思的是,React 并没有直接将事件附着到子元素上,而是以单一事件监听器的方式将所有的事件发送到顶层进行处理。这样 React 在更新 DOM 的时候就不需要考虑如何去处理附着在 DOM 上的事件监听器,最终达到优化性能的目的.原创 2020-08-25 10:37:54 · 844 阅读 · 0 评论 -
如何告诉 React 它应该编译生产环境版
通常情况下我们会使用 Webpack 的 DefinePlugin 方法来将 NODE_ENV 变量值设置为 production。编译版本中 React会忽略 propType 验证以及其他的告警信息,同时还会降低代码库的大小,React 使用了 Uglify 插件来移除生产环境下不必要的注释等信息...原创 2020-08-24 09:45:01 · 441 阅读 · 0 评论 -
React的shouldComponentUpdate 的作用
shouldComponentUpdate 允许我们手动地判断是否要进行组件更新,根据组件的应用场景设置函数的合理返回值能够帮我们避免不必要的更新原创 2020-08-24 09:44:44 · 342 阅读 · 0 评论 -
在生命周期中的哪一步你应该发起 AJAX 请求
我们应当将AJAX 请求放到 componentDidMount 函数中执行,主要原因有下React 下一代调和算法 Fiber 会通过开始或停止渲染的方式优化应用性能,其会影响到 componentWillMount 的触发次数。对于 componentWillMount 这个生命周期函数的调用次数会变得不确定,React 可能会多次频繁调用 componentWillMount。如果我们将 AJAX 请求放到 componentWillMount 函数中,那么显而易见其会被触发多次,自然也就不是.原创 2020-08-24 09:44:17 · 587 阅读 · 0 评论 -
React 中 refs 的作用是什么
Refs 是 React 提供给我们的安全访问 DOM元素或者某个组件实例的句柄可以为元素添加ref属性然后在回调函数中接受该元素在 DOM 树中的句柄,该值会作为回调函数的第一个参数返回原创 2020-08-23 11:34:02 · 923 阅读 · 0 评论 -
传入 setState 函数的第二个参数的作用是什么?
该函数会在setState函数调用完成并且组件开始重渲染的时候被调用,我们可以用该函数来监听渲染是否完成:this.setState( { username: 'tylermcginnis33' }, () => console.log('setState has finished and the component has re-rendered.'))this.setState((prevState, props) => { return { streak:.原创 2020-08-23 11:33:46 · 1751 阅读 · 0 评论 -
React 中 keys 的作用是什么?
Keys是 React 用于追踪哪些列表中元素被修改、被添加或者被移除的辅助标识在开发过程中,我们需要保证某个元素的 key 在其同级元素中具有唯一性。在 React Diff 算法中React 会借助元素的 Key 值来判断该元素是新近创建的还是被移动而来的元素,从而减少不必要的元素重渲染。此外,React 还需要借助 Key 值来判断元素与本地状态的关联关系,因此我们绝不可忽视转换函数中 Key 的重要性...原创 2020-08-23 11:33:27 · 658 阅读 · 0 评论