首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的useState变量抛出无法读取未定义的长度

我的useState变量抛出无法读取未定义的长度
EN

Stack Overflow用户
提问于 2022-03-28 08:10:24
回答 2查看 254关注 0票数 1

在实现分页时,我有一个useState变量,随着页码的更改而改变,下面是我使用两个useEffects调用分页数数据和pagenumber+1来检查它是否抛出404的代码,以便知道何时停止显示next按钮。

代码语言:javascript
复制
useEffect(() => {
    
        async function fetchData() {
            try {
                const baseUrl = 'https://gateway.marvel.com:443/v1/public/characters';
                const url = baseUrl + '?ts=' + ts + '&apikey=' + publickey + '&hash=' + hash+ '&limit=100&offset='+parseInt(pageNumber)*50;
                const { data } = await axios.get(url);
                setCharactersData(data.data.results);
                setLoading(false);
            } catch (e) {
                setCharactersData([]);
                console.log(e);
            }
        }
        
        fetchData();
    }, [ pageNumber ]);


    
    useEffect(() => {
    
        async function fetchData() {
            try {
                const baseUrl = 'https://gateway.marvel.com:443/v1/public/characters';
                const url = baseUrl + '?ts=' + ts + '&apikey=' + publickey + '&hash=' + hash+ '&limit=100&offset='+(parseInt(pageNumber)+1)*50;
                const { data } = await axios.get(url);
                console.log(data);
                setNewData(data.data.results);
                setLoading(false);
            } catch (e) {
                setNewData([]);
                console.log(e);
            }
        }
        
        fetchData();
    }, [ pageNumber ]);

返回部分:

代码语言:javascript
复制
return (
            <div>
                { parseInt(pageNumber)!==0 && <Link className='characterlink1' to={`/characters/page/${parseInt(pageNumber)-1}`}>
                        Previous
                    </Link>}
                    
                    { charactersData.length===0 && <Four />}

                 { newData.length>0 && <Link className='characterlink2' to={`/characters/page/${parseInt(pageNumber)+1}`}>
                        Next
                    </Link>}

在我添加这些行之前,这是很好的:

  1. setCharactersData([]);在返回部分的第一个useEffect.
  2. { charactersData.length===0 &}的catch块中.

如果url有一个比可用分页大的分页数,我添加了这些行来添加404页。当我这样做时,我会发现一个错误:

代码语言:javascript
复制
TypeError: Cannot read properties of undefined (reading 'length')

奇怪的是,我没有看到这个错误,直到我更改url 3-4次。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-28 08:25:03

你在一个catch块中改变你的状态,这不是你应该如何改变你的状态。相反,我认为最好尝试使用空数组初始化状态,以便length属性始终存在,从而删除错误。这样的事情是可以这样做的:

代码语言:javascript
复制
const [charactersData, setCharactersData] = useState([]);

或使用charactersData的类型(yay类型记录)

代码语言:javascript
复制
const [charactersData, setCharactersData] = useState<charactersDataType>([]);
票数 1
EN

Stack Overflow用户

发布于 2022-03-28 08:18:26

这是因为您使用了Pascal套管,在您的获取块中使用了Pascal套管,而在返回块中使用了camelcasing。

代码语言:javascript
复制
return (
            <div>
                { parseInt(pageNumber)!==0 && <Link className='characterlink1' to={`/characters/page/${parseInt(pageNumber)-1}`}>
                        Previous
                    </Link>}
                    
                    { CharactersData.length===0 && <Four />}

                 { newData.length>0 && <Link className='characterlink2' to={`/characters/page/${parseInt(pageNumber)+1}`}>
                        Next
                    </Link>}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71644236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档