Reactjs 平面列表中的动态不同对象

Reactjs 平面列表中的动态不同对象,reactjs,react-native,react-native-flatlist,Reactjs,React Native,React Native Flatlist,我建立了一个自定义的平面列表,因为我的视图是相同的,我不想重复代码 我这样执行平面列表: <FlatListPicker data={availableMeetings} type="days" updateSelect={selectHandler} selected={selectedDay} />

我建立了一个自定义的平面列表,因为我的视图是相同的,我不想重复代码

  • 我这样执行平面列表:

       <FlatListPicker
                    data={availableMeetings}
                    type="days"
                    updateSelect={selectHandler}
                    selected={selectedDay}
                />
    
    
                    <FlatListPicker
                        data={availableMeetings[0].hours}
                        type="hours"
                        updateSelect={selectHandler}
                        selected={selectedHour}
                    />
    
       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()}
            />
          );
         };
    
    
    
  • 自定义平面列表如下所示:

       <FlatListPicker
                    data={availableMeetings}
                    type="days"
                    updateSelect={selectHandler}
                    selected={selectedDay}
                />
    
    
                    <FlatListPicker
                        data={availableMeetings[0].hours}
                        type="hours"
                        updateSelect={selectHandler}
                        selected={selectedHour}
                    />
    
       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()}
            />
          );
         };
    
    constflatlistpicker=({data,type,updateSelect,selected})=>{
    返回(
    (
    updateSelect(item.key,type)}
    >
    {item.dayName}
    {“\n”}
    {type==“天”(
    {item.date}
    ) : (
    {item}
    )}
    )}
    keyExtractor={(项,索引)=>index.toString()}
    />
    );
    };
    
  • 一切正常。但正如您所见,我需要传递名为“Type”的道具来决定在组件中显示什么(因为否则对象项不同,我无法访问对象的属性),因此它看起来有点奇怪,例如:

        {type === "days" ? (
                        <Text style={styles.datetext}>{item.date}</Text>
                    ) : (
                        <Text style={styles.datetext}>{item}</Text>
                    )}
    
    {type==“天”(
    {item.date}
    ) : (
    {item}
    )}
    
  • 我的问题:有办法动态访问项目属性吗


  • 可以使用javascript逻辑运算符

    试试这个

    <Text style={styles.datetext}>{item.date || item}</Text>
    
    {item.date | | item}
    
    您的代码有一个副本my bro最好的方法是:

    const FlatListPicker=({data,type=“days”,updateSelect,selected})=>{
    返回(
    (
    updateSelect(item.key,type)}
    >
    {item.dayName}
    {“\n”}
    {type==“天”?item.date:item}
    )}
    keyExtractor={(项,索引)=>index.toString()}
    />
    );
    };
    
    谢谢。实际上我在mehran的评论中使用了。更多shortly@RoeiGrinshpan祝你好运