我想修改我收到的道具
I want to modify what I receive by props
我想用 .toLocalString() 修改道具接收到的内容,但控制台 returns 出错:
TypeError: cases is undefined about the ligne: const test = cases.toLocalString() in Test component
而如果我不加修改直接渲染道具,它就可以工作,所以道具不是未定义的。
这是父组件:
import React, { useEffect, useState } from "react";
export default function App() {
const [globalStats, setGlobalStats] = useState({})
const getGlobalStats = async () => {
try {
let response = await fetch("https://corona.lmao.ninja/all/")
const data = await response.json()
setGlobalStats(data)
console.log(data)
} catch (err) {
console.error('getGlobalStats error: ', err, err.stack)
}
}
useEffect(() => {
getGlobalStats()
}, [])
return (
<div className="App">
<Test cases={globalStats.cases} />
</div>
);
}
这是子组件:
import React from 'react'
const Test = ({ cases }) => {
const renderCases = cases.toLacalString()
return(
<div>
{
cases ? renderCases : null
}
</div>
)
}
export default Test
这可能发生在 cases
的值实际分配之前组件呈现之前。
您正在使用这样的三元运算符:cases ? renderCases : null
,但这还不够。
我会做这样的事情:
return (
<div className="App">
{globalStats.cases && <Test cases={globalStats.cases} />}
</div>
);
这只会在异步函数 getGlobalStats
完成并更新状态时呈现组件。
您的子组件将执行此操作:
const renderCases = cases.toLocalString()
在第一次渲染时,在第一次渲染时,您的异步函数仍在运行。这意味着案例将是未定义的,这将导致崩溃 toLocalString()
所以这就是正在发生的事情,您正在获取异步任务的数据,因此需要时间,但您的 Test
组件不知道这一点,它会尝试访问尚不存在的数据。所以你可以做的是在访问数据之前进行检查:
import React from 'react'
const Test = ({ cases }) => {
// Check the condition here, also the method name is .toLocaleString()
const renderCases = cases && cases.toLocaleString()
return(
<div>
{
cases ? renderCases : null
}
</div>
)
}
export default Test
希望对您有所帮助:)
我想用 .toLocalString() 修改道具接收到的内容,但控制台 returns 出错:
TypeError: cases is undefined about the ligne: const test = cases.toLocalString() in Test component
而如果我不加修改直接渲染道具,它就可以工作,所以道具不是未定义的。
这是父组件:
import React, { useEffect, useState } from "react";
export default function App() {
const [globalStats, setGlobalStats] = useState({})
const getGlobalStats = async () => {
try {
let response = await fetch("https://corona.lmao.ninja/all/")
const data = await response.json()
setGlobalStats(data)
console.log(data)
} catch (err) {
console.error('getGlobalStats error: ', err, err.stack)
}
}
useEffect(() => {
getGlobalStats()
}, [])
return (
<div className="App">
<Test cases={globalStats.cases} />
</div>
);
}
这是子组件:
import React from 'react'
const Test = ({ cases }) => {
const renderCases = cases.toLacalString()
return(
<div>
{
cases ? renderCases : null
}
</div>
)
}
export default Test
这可能发生在 cases
的值实际分配之前组件呈现之前。
您正在使用这样的三元运算符:cases ? renderCases : null
,但这还不够。
我会做这样的事情:
return (
<div className="App">
{globalStats.cases && <Test cases={globalStats.cases} />}
</div>
);
这只会在异步函数 getGlobalStats
完成并更新状态时呈现组件。
您的子组件将执行此操作:
const renderCases = cases.toLocalString()
在第一次渲染时,在第一次渲染时,您的异步函数仍在运行。这意味着案例将是未定义的,这将导致崩溃 toLocalString()
所以这就是正在发生的事情,您正在获取异步任务的数据,因此需要时间,但您的 Test
组件不知道这一点,它会尝试访问尚不存在的数据。所以你可以做的是在访问数据之前进行检查:
import React from 'react'
const Test = ({ cases }) => {
// Check the condition here, also the method name is .toLocaleString()
const renderCases = cases && cases.toLocaleString()
return(
<div>
{
cases ? renderCases : null
}
</div>
)
}
export default Test
希望对您有所帮助:)