показать элементы на основе раздела

Я хотел показать раздел и элемент, относящийся к этому разделу. Я имею в виду следующий способ

Просроченный

item1

item2

item3

Нет срока

item1

item2

item3

Я пробовал описанный ниже способ, но так я не смог сгенерировать указанный выше пользовательский интерфейс. Как это сделать?

У меня есть следующие данные, поступающие с сервера: время_пуска, время_кончания, время_поминания, заголовок, _id

Вот что я пробовал

const
    ListItem = ({task}) => {
        const
            current_time = new Date();
        if (current_time > task.end_time) {
            return <View key={task._id} style={{flexDirection: 'column', flex: 1}}>
                <Text>overdue</Text>
                <Text>{task.title}</Text>
                <Text>{task.start_time}</Text>
            </View>
        }
        return (
            <View key={task._id} style={{flexDirection: 'column', flex: 1}}>
                <Text>{task.title}</Text>
                <Text>{task.start_time}</Text>
            </View>
        )
    }

const List = ({query}) => {
    console.log('query', query);
    if(query.loading) return <Text>Loading...</Text>
    if(query.error) return <Text>Error...</Text>
    return (
        <Wrapper>
                <View style={{flexDirection: 'row', marginLeft: 10, marginTop: 10}}>
                    <Image
                        resizeMode="contain"
                        source={newIcon}
                        style={{width: 25, height: 25}}
                    />
                    <Text
                        style={{
                            alignSelf: 'center',
                            color: '#1F84DD'
                        }}>
                        New Task
                    </Text>
                </View>
                <FlatList
                    data={query.tasks}
                    renderItem={({item}) => <ListItem task={item} />}
                />
        </Wrapper>
    )
}

пробовал использовать SectionList следующим образом

<SectionList
    sections={[
        {title: 'Overdue', data:query.tasks.filter(task => task.end_time < new Date())},
        {title: 'Upcoming', data:query.tasks.filter(task => task.end_time > new Date())}
    ]}
    renderItem={({item}) => <Text>{item}</Text>}
    renderSectionHeader={
        ({section}) => <Text>{section.title}</Text>
    }
/>

Таким образом я получаю ошибку

нарушение инварианта: объекты недействительны как дочерние объекты React (найдено: объект с ключами _id, start_time, end_time, remcer_time)


person Serenity    schedule 02.01.2018    source источник
comment
С какой проблемой вы столкнулись с текущим кодом?   -  person raksheetbhat    schedule 02.01.2018
comment
Я получаю такие данные, как просроченный элемент1, просроченный элемент1, не подлежащий оплате элемент2, просроченный элемент1, просроченный элемент2, как это.   -  person Serenity    schedule 02.01.2018
comment
Я не мог показать их структурированно. Я имею в виду, что все элементы, срок выполнения которых указан в разделе срока выполнения, и все элементы, срок выполнения которых не установлен, должны отображаться в разделе без срока выполнения, а не зигзагообразно случайным образом.   -  person Serenity    schedule 02.01.2018
comment
Я вижу, что есть SectionList, но я понятия не имею, как мне создать sectionData, потому что каждый раздел должен иметь свои данные. Могу ли я фильтровать элементы на основе расчета времени для каждого раздела?   -  person Serenity    schedule 02.01.2018
comment
Это потому, что ваш ListItem возвращает элементы условно, верно? То есть, в зависимости от текущего временного условия, он возвращает либо просроченный, либо не просроченный. Для структурированного формата вам нужно сначала получить все просроченные элементы, а затем получить элементы списка, которые не подлежат оплате.   -  person raksheetbhat    schedule 02.01.2018
comment
@raksheetbhat Я обновил свой вопрос. Я получаю сообщение об ошибке при использовании SectionList   -  person Serenity    schedule 02.01.2018
comment
Одна из причин возникновения ошибки «Объекты недействительны в качестве дочернего элемента React» заключается в том, что вы передаете объекты в jsx, где ожидается строка. Проверьте эту ссылку: stackoverflow.com/questions/33117449/   -  person raksheetbhat    schedule 02.01.2018


Ответы (1)


Я вижу одно возможное решение. В коде списка разделов вы печатаете объект элемента внутри текстового компонента, где он должен быть заголовком. Замените renderItem = {({item}) => {item}} на renderItem = {({item}) => {item.titke}}.

Спасибо.

person Vishu Bhardwaj    schedule 02.01.2018
comment
Я получаю время в этом формате (2016-08-05T08: 38: 50.142Z). Как можно рассчитать срок сдачи и срок ее отсутствия в этом формате? - person Serenity; 02.01.2018
comment
Привет, вы можете использовать момент js (momentjs.com/docs) для этой функции. Преобразование заданной даты в метку времени. пусть x = момент (2016-08-05T08: 38: 50.142Z, ГГГГ-ММ-ДДТЧЧ: мм: ss.SSSZ) .unix (); И преобразовать текущее время в метку времени. пусть y = moment (). unix (); Тогда если x - y ›0 Дата в будущем. иначе, если x - y ‹0 Дата в прошлом. else Date - текущая дата. - person Vishu Bhardwaj; 05.01.2018