【问题标题】:React Native compare value between items in flatlistReact Native 比较平面列表中项目之间的值
【发布时间】:2021-11-12 14:32:35
【问题描述】:

我是 React Native 的新手。我想问一下,添加新项目后是否可以比较flatlist中前一个项目的值。

例如,我添加了一个值为 10 的项目。然后我在平面列表中添加了另一个值为 30 的项目。按下“添加”按钮后,它会自动提醒说上一个和新之间的差异项目是 20。

另外,我使用 Math.random() 创建项目的 id 应该不是问题,对吧?提前感谢您的建议和支持。

【问题讨论】:

    标签: react-native react-hooks react-native-flatlist


    【解决方案1】:

    尝试在渲染项目的方法中使用值填充数组并使用索引来计算差异。例如,现在数组中有两个项目。按下按钮后执行

     array[array.length - 2] - array[array.length - 1]. 
    

    如果你熟悉 OOP,你可以定义构造函数并在那里创建数组 this.array = [];

    【讨论】:

    • 好的,丹尼。我将尝试实现它并看看它是如何进行的。谢谢
    【解决方案2】:

    是的,这是可能的。我在这里准备了点心:

    https://snack.expo.dev/@moistbobo/so-69228068

    在这里,我使用useState 挂钩来跟踪值数组。

    然后,在onAdd 处理程序中,我检查values 数组的长度是否大于1,如果是,我会显示带有差异的警报。这是为了防止数组为空时出错。我在将其添加到状态之前进行差异计算,以便values.length - 1 将始终引用values 数组中的最后一个元素。

    另外,我使用 Math.random() 创建项目的 id 应该不是问题吧?

    物品的id不会影响上面的逻辑。您只需跟踪对象数组而不是像我的示例中那样的数字数组,并更改第 17 行的逻辑以使用对象的值进行减法。

    虽然它超出了这个问题的范围,但使用Math.random() 生成 id 通常不是一个好主意,因为 2 个项目很有可能具有相同的 id。 nanoid 是一个很好的 id 生成替代方案。

    【讨论】:

    • 好的,Moistbobo。我非常感谢您准备的小吃,解释非常有帮助且易于理解,也感谢您对 id 生成替代方案的建议。
    • 顺便说一句,因为我正在为我的项目使用 android studio 模拟器。如何替换“从'expo-constants'导入常量”?
    • 如果您不使用 expo(即如果您使用 cli 创建项目),则不需要导入 expo-constants
    • 哦,好吧。再次感谢你 Moistbobo。我真的很感激:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    相关资源
    最近更新 更多