javascript - React Native 可重用组件的设置状态问题

标签 javascript reactjs react-native jsx

我尝试制作一张可重复使用的卡片,可以在其中增加不同元素的数量。 我尝试了很多方法,但都没能成功。 我使用平面列表来显示每张卡片。 这是卡片:

export default function Card(props) {
  return (
    <View style={styles.card}>
      <Text>{props.children}</Text>
      <TouchableOpacity
        onPress={() => {
          console.log(props.number);
          props.set(props.number+1)
        }}
      >
        <FontAwesome size={30} name="plus" color="red" />
      </TouchableOpacity>
    </View>
  );
}

这是我使用平面列表的地方:

export default function User() {
  const [objects, setObjects] = useState([
    {
      id: "1",
      name: "pants",
      quantity: 0,
    },
    {
      id: "2",
      name: "t-shirt",
      quantity: 0,
    },
  ]);
  return (
    <SafeAreaView>
      <FlatList

        data={objects}
        keyExtractor={(item) => item.id}
        renderItem={({ item }) => (
          <Card number={item.quantity} set = {setObjects}>
            {item.name}
          </Card>
        )}
      />
    </SafeAreaView>
  );
}

最佳答案

这行得通吗?像这样调用 props.set:

props.set({
  ...props.item,
  quanitity: props.item.quantity + 1,
})

:

<Card
  item={item}
  set={item => setObjects(objs => {
    for (const obj of objs) {
      if (obj.id === item.id) {
        obj.quantity++
        break
      }
    }
    return objs
  }}
>

如果可行,我仍然建议进行一些重构:

<Card
  item={item}
  add={() => setObjects(objs => {
    for (const obj of objs) {
      if (obj.id === item.id) {
        obj.quantity++
        break
      }
    }
    return objs
  }}
>

<TouchableOpacity onPress={props.add}>

关于javascript - React Native 可重用组件的设置状态问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61194062/

相关文章:

javascript - 在React中清除父子组件之间的状态和输入值

javascript - React Native 中的文本位置

javascript - 如何在 React Native 中更改获取响应时的按钮?

javascript - 最佳确认对话框 JavaScript 库

javascript - jQuery Mobile js 仅在刷新页面时才起作用

reactjs - 无法读取React中未定义的属性 'map'

javascript - 如何使用 Headless UI 折叠 sibling

react-native - react 原生 map : Custom Markers cause extreme lag and slow down on android

javascript - 寻找 Ace Editor 中的更改

javascript - 在 Canvas 中制作弧形动画的最佳方式