React Native обрабатывает вложенный объект с помощью карты и отображения

#react-native #promise #nested-loops #react-native-flatlist

#react-native #обещание #вложенные циклы #react-native-flatlist

Вопрос:

как обрабатывать вложенный объект с помощью карты для отображения в flatlist или text или другом компоненте в react native. я пытался отобразить с помощью text и flatlist, но не сработало, я хочу отображать так

введите описание изображения здесь

это мой код,

 const Schedule = () => {
const [resp, setData] = useState([]);
 useEffect(() => {
      const fetchData = async () => {
        const respData1 = await axios(
          `http://sh3ll.my.id/api/data3.json`
        );  
        setData({ data: respData1.data.data });  
      };
        fetchData();
    },[]);

    console.log('render');
    if (resp.data) {
      console.log("d==>", resp);
    }

    return (
       <View style={{paddingTop:20}}>
            { resp.data amp;amp; resp.data.map((items,i)=> 
                <Text key={i}>{`${items.date} ${items.time}`}
                  {items.list.map((sub)=>{ `${sub.description}`
                  })}
                </Text> 
             ) }
        
        {/* <FlatList data={resp} 
        keyExtractor={(x,i)=>i}
        renderItem={({item})=>
        ....?? }
        /> */}

      </View>
    )
}

export default Schedule
 

Комментарии:

1. Можете ли вы также поместить вложенный объект из запроса?

2. если я поставлю ${items.list} после $ {items.time}, вы увидите, что объект есть

Ответ №1:

Глядя на ваш код, я предполагаю, что ваш объект данных выглядит следующим образом:

 const resp = {
    data: [
      {
        date: "date 1",
        time: "time 1",
        list: [{ description: "desc 1" }, { description: "desc 2" }]
      },
      {
        date: "date 2",
        time: "time 2",
        list: [{ description: "desc 1" }, { description: "desc 2" }]
      }
    ]
  };
 

Если это правильно, вы можете сгладить свой объект, вызвав собственную функцию «createDescription», которая позаботится о рендеринге описаний:

 function createDescription(listItem) {
    return <p>{listItem.description}</p>;
}

  return (
    <table style={{ paddingTop: 20 }}>
      {resp.data amp;amp;
        resp.data.map((items, i) => (
          <tr key={i}>
            <td>{items.date}</td>
            <td>{items.time}</td>
            <td>{items.list.map((sub) => createDescription(sub))}</td>
          </tr>
        ))}
    </table>
  );
 

Теперь, когда ваш HTML правильно отображен, вы можете исправить макет с помощью CSS.

Комментарии:

1. спасибо, что данные появились, но у меня проблема с <p> в react native prnt.sc/vwuula

2. Можете ли вы попробовать использовать фрагменты ( <> </> ) вместо <p> </p> ? Я не привык работать с React Native, но это должно сработать.

3. хорошо, мне удалось привести в порядок это: style = {{flexShrink: 1, width: ‘20%’}} и вы можете видеть prnt.sc/vx213e что это идеально. спасибо, чувак. вы мне помогли