FlatList 中动态不同的对象

Different object dynamically in FlatList

我构建了一个自定义的 FlatList ,因为我的视图是一样的,我不想重复代码。

  1. 我这样执行平面列表:

       <FlatListPicker
                    data={availableMeetings}
                    type="days"
                    updateSelect={selectHandler}
                    selected={selectedDay}
                />
    
    
                    <FlatListPicker
                        data={availableMeetings[0].hours}
                        type="hours"
                        updateSelect={selectHandler}
                        selected={selectedHour}
                    />
    
  2. 自定义平面列表如下所示:

       const FlatListPicker = ({ data, type, updateSelect, selected }) => {
       return (
        <FlatList
        horizontal={true}
        data={data}
        renderItem={({ item }) => (
            <TouchableOpacity
                style={[
                    styles.button,
                    selected === item.key && styles.buttonselected,
                ]}
                onPress={() => updateSelect(item.key, type)}
            >
                <Text
                    style={[
                        styles.daytext,
                        selected === item.key && styles.textselected,
                    ]}
                >
                    {item.dayName}
                    {"\n"}
                    {type === "days" ? (
                        <Text style={styles.datetext}>{item.date}</Text>
                    ) : (
                        <Text style={styles.datetext}>{item}</Text>
                    )}
                </Text>
            </TouchableOpacity>
             )}
            keyExtractor={(item, index) => index.toString()}
            />
          );
         };
    
  3. 一切正常。但是就像你看到的,我需要传递名为“Type”的道具来决定在组件中显示什么,(因为否则对象 Item 是不同的,我无法访问对象的属性),所以它看起来有点奇怪,例如:

        {type === "days" ? (
                        <Text style={styles.datetext}>{item.date}</Text>
                    ) : (
                        <Text style={styles.datetext}>{item}</Text>
                    )}
    
  4. 我的问题:有一种动态访问项目属性的方法吗?

你可以使用javascript逻辑运算符

试试这个

<Text style={styles.datetext}>{item.date || item}</Text>

你的代码有重复我的兄弟最好的方法是 tornary operator:

   const FlatListPicker = ({ data, type = "days", updateSelect, selected }) => {
   return (
    <FlatList
    horizontal={true}
    data={data}
    renderItem={({ item }) => (
        <TouchableOpacity
            style={[
                styles.button,
                selected === item.key && styles.buttonselected,
            ]}
            onPress={() => updateSelect(item.key, type)}
        >
            <Text
                style={[
                    styles.daytext,
                    selected === item.key && styles.textselected,
                ]}
            >
                {item.dayName}
                {"\n"}
               <Text style={styles.datetext}>{type === "days" ? item.date : item }</Text>
            </Text>
        </TouchableOpacity>
         )}
        keyExtractor={(item, index) => index.toString()}
        />
      );
     };