亲宝软件园·资讯

展开

React编程错误 React编程中需要注意的两个错误

Zong_0915 人气:0
想了解React编程中需要注意的两个错误的相关内容吗,Zong_0915在本文为您仔细讲解React编程错误的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:react开发,React,教程,react基本使用,下面大家一起来学习吧。

前言

在React编程中, 我们习惯用useEffect、useState等Hook去进行开发,但是在开发过程中难免会遇到许多问题,前阵子,我在写代码的时候,踩过不少坑,这里先列举两个较为常见的,也希望读者们看完这篇文章能够避免踩坑!

一. useEffect无限渲染

背景:

伪代码如下:

import React, { useState, useEffect } from 'react';

const App = () => {
    const [userName, setUserName] = useState<string>('')
    
    useEffect(() => {
    	// 调取后台接口
        const data = getData()
        // 赋值给对应的State
        setUserName(data.userName)
    })

    return (
        <div>
            <span>用户名:{userName}</span>
        </div>
    )
}
export default App;

这样的代码看似没什么问题,逻辑也很正确,但是实际效果会发生什么呢?来看下下面的例子:

import React, { useState, useEffect } from 'react';

const App = () => {
    const [count, setCount] = useState(0)
    useEffect(() => {
        setCount(count+1)
    })

    return (
        <div>
            <span>{count}</span>
        </div>
    )
}
export default App;

页面效果如下:

大家测试一下就会发现,页面上的数字是会无限增长的,而且你的电脑内存一下子Up起来(可以听听你的电脑风扇是不是吹得更猛了~)。

这个结果说明了什么?说明了useEffect()在无限的调用中。

原因分析如下:

解决方案如下:useEffect()的第二个参数加一个空数组即可。

import React, { useState, useEffect } from 'react';

const App = () => {
    const [count, setCount] = useState(0)
    useEffect(() => {
        setCount(count+1)
    },[])

    return (
        <div>
            <span>{count}</span>
        </div>
    )
}
export default App;

那么useEffect()就只会执行一次:

二. 带状态的变量赋给Input框作为默认值,页面无法修改内容

废话不说,直接上案例:

import React, { useState, useEffect } from 'react';

const App = () => {
    const [count, setCount] = useState('初始内容')
    return (
        <div>
            <input type="text" value={count} />
        </div>
    )
}
export default App;

那么页面的效果是这样的:

可以发现我明明尝试输入字段,但是Input的内容依旧无法改变。原因如下:

解决方案:给这个Input框增加一个onChange事件,让其监听到内容的改变,并实时的调用setXXX方法。

代码如下:

import React, { useState, useEffect } from 'react';

const App = () => {
    const [count, setCount] = useState('初始内容')
    return (
        <div>
            <input type="text" value={count} onChange={(event)=>setCount(event.target.value)}/>
        </div>
    )
}
export default App;

页面效果如下:

总结

加载全部内容

相关教程
猜你喜欢
用户评论