Javascript 第一次单击未呈现正确的数据[第二次单击有效]?

Javascript 第一次单击未呈现正确的数据[第二次单击有效]?,javascript,react-native,google-cloud-functions,expo,Javascript,React Native,Google Cloud Functions,Expo,我这里有一个菜单,是用水平平面列表制作的: 菜单代码: <View style={{ position: 'absolute', left: 0, top: 0 }}> <FlatList horizontal data={categories} extraData={ selectedCategory // for single item } style={styles.flatList}

我这里有一个菜单,是用水平平面列表制作的:

菜单代码:

<View style={{ position: 'absolute', left: 0, top: 0 }}>
    <FlatList
      horizontal
      data={categories}
      extraData={
      selectedCategory // for single item
    }
      style={styles.flatList}
      renderItem={({ item: rowData }) => (
        <TouchableOpacity
          onPress={() => recalculateCategory(rowData)} 
          style={rowData === selectedCategory ? styles.selected : styles.unselected}
        >
          <Text style={{ fontWeight: 'bold', color: '#FFFFFF', padding: 6 }}>
            { rowData }
          </Text>

        </TouchableOpacity>
      )}
      keyExtractor={(item, index) => item.toString()}
    />
  </View>
getCollection的代码:

const getCollection = async() => {
    setIsLoading(true);
    const index = 1;
    const getThoughtsOneCategory = Firebase.functions().httpsCallable('getThoughtsOneCategory');
    await getThoughtsOneCategory({
      index,
      category: selectedCategory,
    }).then((result) => {
      setThoughts(result.data);
      setIsLoading(false);
    }).catch((err) => {
      console.log(err);
    });
  };
其工作原理是:如果您想查看选项文章,请单击“选项”,它会相应地呈现数据

我遇到了一个问题

  • 我们在“股票”上
  • 点击“选项”[注意数据与“股票”相同]
  • 再次点击“选项”,我们得到正确的数据

  • 如何修复双击菜单类别的要求?谢谢

    不用直接调用
    getCollection
    ,只要类别发生变化,就可以使用
    useffect
    调用它

    比如:

    useEffect(() => {
      getCollection();
    },[selectedCategory])
    
    然后,您的
    重新计算类别将如下所示:

    const recalculateCategory = (rowData) => {
      setSelectedCategory(rowData);
    };
    

    每当第二个参数中的参数更改时,
    useffect
    就会运行。您可能需要调整它们以适应您的用例,但是
    selectedCategory
    肯定会在其中。

    您似乎没有包含足够的代码来诊断此问题。你能创建一个吗?特别是“重新计算类别(rowData)”,看看这是什么会很好does@StarshipladDev嘿我又加了一点code@jnpdx嘿我添加了更多的代码。抓取发生在云函数中,如果必要的话,我也可以添加它,但这在前端对我来说似乎是个问题,因为根据日志
    setSelectedCategory
    可以正常工作,它是异步的,并且在调用
    getCollection
    时不会完成。您应该使用
    useffect
    运行
    getCollection
    ,或者将类别作为参数发送到
    getCollection
    。你知道怎么做吗?
    const recalculateCategory = (rowData) => {
      setSelectedCategory(rowData);
    };