在 if 语句中找不到变量名
can't find variable name when its inside an if statement
在 运行 一个 graphql 查询之后,我从结果中提取一些值到一个对象中,并在我的平面列表中使用它。
const DATA = data.users.nodes[0].userRelations.map(
(item: { relatedUser: { firstName: string; id: number } }) => ({
id: item.relatedUser.id,
imageUrl: defaultUrl,
name: item.relatedUser.firstName,
}),
);
这行得通。然而,当我把它改成这样的时候:
const { error, data, refetch } = useUsersQuery({
variables: {
where: { id: 1 },
},
});
if (data) {
const DATA = data.users.nodes[0].userRelations.map(
(item: { relatedUser: { firstName: string; id: number } }) => ({
id: item.relatedUser.id,
imageUrl: defaultUrl,
name: item.relatedUser.firstName,
}),
);
} else {
const DATA = [
{
id: 'bd7acbea-c1b1-46c2-aed5-3ad53abb28ba',
imageUrl: defaultUrl,
name: 'Johann',
},
{
id: '3ac68afc-c605-48d3-a4f8-fbd91aa97f63',
imageUrl: defaultUrl,
name: 'Lars',
},
{
id: '58694a0f-3da1-471f-bd96-145571e29d72',
imageUrl: defaultUrl,
name: 'Sarah',
},
];
}
...
<FlatList
data={DATA}
horizontal={true}
scrollEnabled
renderItem={({ item }) => (
<WhitelistItem title={item.name} face={item.imageUrl} />
)}
keyExtractor={(item) => item.id}
/>
我开始在 data={DATA}
Cannot find name 'DATA'. Did you mean 'data'?
处收到错误。为什么会这样?即使查询失败,我仍然在 else 语句中创建一个 DATA
变量。那么为什么这里没有被检测到呢?我该如何解决这个问题?
let DATA;
if (data) {
DATA = data.users.nodes[0].userRelations.map(
(item: { relatedUser: { firstName: string; id: number } }) => ({
id: item.relatedUser.id,
imageUrl: defaultUrl,
name: item.relatedUser.firstName,
}),
);
} else {
DATA = [
{
id: 'bd7acbea-c1b1-46c2-aed5-3ad53abb28ba',
imageUrl: defaultUrl,
name: 'Johann',
},
{
id: '3ac68afc-c605-48d3-a4f8-fbd91aa97f63',
imageUrl: defaultUrl,
name: 'Lars',
},
{
id: '58694a0f-3da1-471f-bd96-145571e29d72',
imageUrl: defaultUrl,
name: 'Sarah',
},
];
}
let
和 const
是块范围,这意味着它们没有在声明它们的块(大括号)之外定义。当您在 if/else 中声明 DATA
时,它仅在其中声明。
在 运行 一个 graphql 查询之后,我从结果中提取一些值到一个对象中,并在我的平面列表中使用它。
const DATA = data.users.nodes[0].userRelations.map(
(item: { relatedUser: { firstName: string; id: number } }) => ({
id: item.relatedUser.id,
imageUrl: defaultUrl,
name: item.relatedUser.firstName,
}),
);
这行得通。然而,当我把它改成这样的时候:
const { error, data, refetch } = useUsersQuery({
variables: {
where: { id: 1 },
},
});
if (data) {
const DATA = data.users.nodes[0].userRelations.map(
(item: { relatedUser: { firstName: string; id: number } }) => ({
id: item.relatedUser.id,
imageUrl: defaultUrl,
name: item.relatedUser.firstName,
}),
);
} else {
const DATA = [
{
id: 'bd7acbea-c1b1-46c2-aed5-3ad53abb28ba',
imageUrl: defaultUrl,
name: 'Johann',
},
{
id: '3ac68afc-c605-48d3-a4f8-fbd91aa97f63',
imageUrl: defaultUrl,
name: 'Lars',
},
{
id: '58694a0f-3da1-471f-bd96-145571e29d72',
imageUrl: defaultUrl,
name: 'Sarah',
},
];
}
...
<FlatList
data={DATA}
horizontal={true}
scrollEnabled
renderItem={({ item }) => (
<WhitelistItem title={item.name} face={item.imageUrl} />
)}
keyExtractor={(item) => item.id}
/>
我开始在 data={DATA}
Cannot find name 'DATA'. Did you mean 'data'?
处收到错误。为什么会这样?即使查询失败,我仍然在 else 语句中创建一个 DATA
变量。那么为什么这里没有被检测到呢?我该如何解决这个问题?
let DATA;
if (data) {
DATA = data.users.nodes[0].userRelations.map(
(item: { relatedUser: { firstName: string; id: number } }) => ({
id: item.relatedUser.id,
imageUrl: defaultUrl,
name: item.relatedUser.firstName,
}),
);
} else {
DATA = [
{
id: 'bd7acbea-c1b1-46c2-aed5-3ad53abb28ba',
imageUrl: defaultUrl,
name: 'Johann',
},
{
id: '3ac68afc-c605-48d3-a4f8-fbd91aa97f63',
imageUrl: defaultUrl,
name: 'Lars',
},
{
id: '58694a0f-3da1-471f-bd96-145571e29d72',
imageUrl: defaultUrl,
name: 'Sarah',
},
];
}
let
和 const
是块范围,这意味着它们没有在声明它们的块(大括号)之外定义。当您在 if/else 中声明 DATA
时,它仅在其中声明。