首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

新手React开发人员做错的5件事

childComponent 渲染。它去哪儿了?代码编译成功,终端也没有错误。 再次查看子组件的代码。注意组件的名称,你注意到什么不同了吗?...结果,其 标记内呈现任何内容。 注意哪些prop被传递到您的组件中,并相应地访问它们。这将在调试期间为您节省一些不必要的麻烦。...当您在 render() 函数中调用 setState() 时也会发生此错误。 为什么会这样?每次调用 setState() 时,React将通过调用 render() 重新渲染。...您的 render() 函数内部是什么? setState()。你看到结果了吗?一个无限循环。 只需将 setState() 调用移到 render() 函数之外即可。...如果可以在组件挂载之前初始化状态,也可以使用构造函数来完成。 5.setState()的异步性 在调试时,通常使用 console.log() 打印值。但是,当代码异步运行时,这不能很好地工作。

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

【React】1413- 11 个需要避免的 React 错误用法

直接通过赋值方式修改 state 值 问题描述 在 React 中,state 是不能直接赋值修改,否则会导致难以修复的问题,因此下面的写法: updateState = () => { this.state.name...解决方法 类组件可以通过 setState()方法修改,函数组件使用 useState()即可: // ClassComponent:use setState() this.setState({ name...解决方法 只需要将要执行的后续操作封装成函数,作为 setState()第二个参数,该回调函数会在更新完成后执行。 this.setState({ name: "Hello Chris1993!"...错误的使用布尔运算符 问题描述 在 JSX/TSX 语法中,我们经常通过布尔值来控制渲染的元素,很多情况我们会使用 &&运算符来处理这种逻辑: const count = 0; const Comp =...所以我们尽量要把判断条件写完整,不依赖 JavaScript 的布尔值真假来比较: const count = 0; const Comp = () => count > 0 && Chris1993

1.6K20

11 个需要避免的 React 错误用法

直接通过赋值方式修改 state 值 问题描述 在 React 中,state 时不能直接赋值修改,否则会导致难以修复的问题,因此下面的写法: updateState = () => { this.state.name...解决方法 类组件可以通过 setState()方法修改,函数组件使用 useState()即可: // ClassComponent:use setState() this.setState({ name...解决方法 只需要将要执行的后续操作封装成函数,作为 setState()第二个参数,该回调函数会在更新完成后执行。 this.setState({ name: "Hello Chris1993!"...错误的使用布尔运算符 问题描述 在 JSX/TSX 语法中,我们经常通过布尔值来控制渲染的元素,很多情况我们会使用 &&运算符来处理这种逻辑: const count = 0; const Comp =...所以我们尽量要把判断条件写完整,不依赖 JavaScript 的布尔值真假来比较: const count = 0; const Comp = () => count > 0 && Chris1993

2K30

深入理解React的组件状态

在React中,直接修改state并不会触发render函数,所以下面的写法是错误的。...如果我们要实现加2的效果,可以使用另一个接收一个函数作为参数的setState,这个函数有两个参数,第一个是当前最新状态(本次组件状态修改后的状态)的前一个状态preState(本次组件状态修改前的状态...状态的类型是不可变类型(数字,字符串,布尔值,null, undefined) 这种情况最简单,因为状态是不可变类型,直接给要修改的状态赋一个新值即可。...// 方法一:将state先赋值给另外的变量,然后使用Object.assign创建新对象 var owner = this.state.owner; this.setState({ owner:...那么,为什么React推荐组件的状态是不可变对象呢?

2.3K30

小前端读源码 - React16.7.0(深入了解setState)

this.setState是从哪里来的? 为什么在短时间内连续setState两次甚至多次只会触发一次render? 为什么setState是异步的?...enqueueSetState函数是从constructClassInstance函数中实例化了class后,执行了一个adoptClassInstance函数,在里面对实例的对象的updater进行了赋值...从上面的代码解析,也明白之前的两个问题: 为什么在短时间内连续setState两次甚至多次只会触发一次render? 为什么setState是异步的?...为什么setState是异步呢?...这也是因为刚刚说到的,合成事件会先执行onClick中的setState,但是并不会马上进行渲染,所以新的state只存在于Fiber节点的updateQueue中,并不会马上赋值到组件的state中。

70420

【React源码笔记】setState原理解析

为什么setState是有时候是异步会不会有同步的呢?为什么多次更新state的值会被合并只会触发一次render?为什么直接修改this.state无效???...我们在调用setState时,也就调用了 this.updater.enqueueSetState,updater是通过依赖注入的方式,在组件实例化的时候注入进来的,而之后被赋值为classComponentUpdater...同时也禁止在shouldComponentUpdate中调用setState,因为调用setState会再次触发这个函数,然后这个函数又触发了 setState,然后再次触发这两个函数……这样会进入死循环...instance, prevState, nextProps);           ...      }      ...      // 重点:通过Object.assign生成一个全新的state,和更新的部分...state,将其赋值给每次partialState。

1.9K10

React中的setState的同步异步与合并

在大多数情况下,你可以 在constructor()中使用赋值初始状态来代替。然而,有些情况下必须这样,比如像模态框和工具提示框。...你又是否理解为什么会出现上面的答案?接下来我们就来仔细分析一下。...在【d,e】两个 setState 时,它的参数是函数,这个函数接收的第一个参数 preState (旧的 state ),在这里是“同步”的,虽有能拿到即时更新的值,那么经过【a,b】两次 setState...因为上面我们说过的执行顺序的关系,再经过【d,e】两次 setState ,所以 count 变成了3。 那么在【3】中打印出4又是为什么?...那么接下来我们做下总结: this.state是否异步,关键是看是否命中 batchUpdata 机制,命中就异步,命中就同步。

1.4K30

React源码分析1-jsx转换及React.createElement4

另外我在第一次学习 react 的时候,就有一个疑惑: import React, { Component } from 'react' 这段代码中,React 似乎在代码中没有任何地方被用到,为什么要引入呢...config:写在标签上的属性的集合,js 对象格式,若标签上添加任何属性则为 null。...函数中会对参数进行一系列的解析,源码如下,对源码相关的理解都用注释进行了标记: export function createElement(type, config, children) { let...childArray); } } props.children = childArray; } // 如果有 defaultProps,对其遍历并且将用户在标签上对其手动设置属性添加进...Component.prototype.isReactComponent = {}; // 给类组件添加 `this.setState` 方法 Component.prototype.setState

78430

jsx转换及React.createElement

另外我在第一次学习 react 的时候,就有一个疑惑: import React, { Component } from 'react' 这段代码中,React 似乎在代码中没有任何地方被用到,为什么要引入呢...config:写在标签上的属性的集合,js 对象格式,若标签上添加任何属性则为 null。...函数中会对参数进行一系列的解析,源码如下,对源码相关的理解都用注释进行了标记:export function createElement(type, config, children) { let propName...Object.freeze(childArray); } } props.children = childArray; } // 如果有 defaultProps,对其遍历并且将用户在标签上对其手动设置属性添加进...Component.prototype.isReactComponent = {};// 给类组件添加 `this.setState` 方法Component.prototype.setState =

1K90

React--7: 组件的三大核心属性1:state

要把函数的返回值赋过来,onClick="demo()" 是一个赋值语句,把右边的返回值赋值给onClick作为回调。demo函数的返回值是什么?是undefined。现在点击是没有效果的。...为什么会没有this呢? 首先这个函数是我们自定义的函数,而Babel在将我们的jsx转为js的时候是严格模式。它不允许自定义的函数的this指向window。...使用bind this.demo = this.demo.bind(this) 本质上来说是一个赋值语句,先看右边,实例上其实是没有demo的,那么为什么不会报错呢?...精简代码 3.1 去掉构造器 为什么写构造器? 因为要做一些初始化的操作。感不感觉是没地方写了才写到构造器里的。 类中是可以直接写赋值语句的 。所以给state赋值,不需要非得写在构造器中。...isHot}) console.log(isHot) } 那么为什么那? 箭头函数是没有this的,那在箭头函数里使用 this 会报错吗?

1.5K20

React源码分析1-jsx转换及React.createElement

另外我在第一次学习 react 的时候,就有一个疑惑: import React, { Component } from 'react' 这段代码中,React 似乎在代码中没有任何地方被用到,为什么要引入呢...config:写在标签上的属性的集合,js 对象格式,若标签上添加任何属性则为 null。...函数中会对参数进行一系列的解析,源码如下,对源码相关的理解都用注释进行了标记:export function createElement(type, config, children) { let propName...Object.freeze(childArray); } } props.children = childArray; } // 如果有 defaultProps,对其遍历并且将用户在标签上对其手动设置属性添加进...Component.prototype.isReactComponent = {};// 给类组件添加 `this.setState` 方法Component.prototype.setState =

90730

React源码分析1-jsx转换及React.createElement_2023-02-19

另外我在第一次学习 react 的时候,就有一个疑惑: import React, { Component } from 'react' 这段代码中,React 似乎在代码中没有任何地方被用到,为什么要引入呢...config:写在标签上的属性的集合,js 对象格式,若标签上添加任何属性则为 null。...函数中会对参数进行一系列的解析,源码如下,对源码相关的理解都用注释进行了标记:export function createElement(type, config, children) { let propName...Object.freeze(childArray); } } props.children = childArray; } // 如果有 defaultProps,对其遍历并且将用户在标签上对其手动设置属性添加进...Component.prototype.isReactComponent = {};// 给类组件添加 `this.setState` 方法Component.prototype.setState =

76620

React源码分析1-jsx转换及React.createElement

另外我在第一次学习 react 的时候,就有一个疑惑: import React, { Component } from 'react' 这段代码中,React 似乎在代码中没有任何地方被用到,为什么要引入呢...config:写在标签上的属性的集合,js 对象格式,若标签上添加任何属性则为 null。...函数中会对参数进行一系列的解析,源码如下,对源码相关的理解都用注释进行了标记:export function createElement(type, config, children) { let propName...Object.freeze(childArray); } } props.children = childArray; } // 如果有 defaultProps,对其遍历并且将用户在标签上对其手动设置属性添加进...Component.prototype.isReactComponent = {};// 给类组件添加 `this.setState` 方法Component.prototype.setState =

81930

社招前端一面react面试题汇总

为什么不直接更新 state 呢 ?如果试图直接更新 state ,则不会重新渲染组件。...即:Hooks 组件(使用了Hooks的函数组件)有生命周期,而函数组件(使用Hooks的函数组件)是没有生命周期的。...setState 是同步的还是异步的有时表现出同步,有时表现出异步setState 只有在 React 自身的合成事件和钩子函数中是异步的,在原生事件和 setTimeout 中都是同步的setState...,在异步中如果对同一个值进行多次 setStatesetState 的批量更新策略会对其进行覆盖,去最后一次的执行,如果是同时 setState 多个不同的值,在更新时会对其进行合并批量更新合成事件中是异步钩子函数中的是异步原生事件中是同步...shouldComponentUpdate 应该返回一个布尔值来决定组件是否要重新渲染componentWillUpdate -- 很少使用。

3K20
领券