не может найти имя переменной, когда оно находится внутри оператора if - PullRequest
0 голосов
/ 18 июня 2020

после выполнения запроса 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'?. Почему это так? Даже если запрос не выполняется, я все равно создаю переменную DATA в операторе else. Так почему же здесь не обнаруживается? Как я могу это исправить?

1 Ответ

2 голосов
/ 18 июня 2020
  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 являются областью блока, что означает, что они не определены вне блока (фигурные скобки), в котором они объявлены. Когда вы объявляете DATA внутри вашего if / else, он объявляется только внутри.

...