#reactjs
Вопрос:
Вопрос, у меня есть этот список задач, поступающий с моего бэкенда, я не знаю, почему мои данные не отображаются, когда я назначаю это новому объекту. Я планирую создать компонент задачи перетаскивания.
const BoardView = ({ datas, showTask, taskInfo }) => {
const [filteredList, setFilteredList] = useState(datas);
const listColumns = {
[uuidv4()]: {
name: 'Proposed',
items: filteredList,
},
[uuidv4()]: {
name: 'In Progress',
items: [],
},
[uuidv4()]: {
name: 'Review',
items: [],
},
[uuidv4()]: {
name: 'Done',
items: [],
},
};
console.log(datas) => data is appearing
return (
<>
<div className='w-full p-8 grid grid-flow-col grid-cols-4 gap-8'>
<DragDropContext
onDragEnd={(result) => onDragEnd(result, columns, setColumns)}
>
{Object.entries(columns).map(([columnId, column], index) => {
return (
<div
style={{
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
}}
key={columnId}
>
{console.log(column.item)} => there's no data
</div>
);
})}
</DragDropContext>
</div>
</>
);
};
Выход
Комментарии:
1. Данные должны быть присвоены переменной состояния , если вам нужно отразить это в своем шаблоне
2. Я также сначала присваиваю данные переменной состояния, но результат тот же.
3. @rjc30 это связано с тем , что, когда назначено состояние (
datas
)filteredList
, данные еще не были извлечены. Попробуйте выполнить внутреннюю выборку данных вBoardView
компоненте4. @rjc30 Где находится значение настроек для
columns
5. Я глуп, я забыл установить переменную с помощью useEffect. Спасибо за помощь, ребята!
Ответ №1:
При загрузке компонента происходит попадание в конечную точку API. В настоящее время ваш компонент загружен, а данные еще не извлечены. Итак, мы получим данные, а затем отрисоваем компонент
Для этого, обернем логику извлечения данных в useEffect
крючок, где вы сделаете 2 вещи —
- Извлеките данные
- Заполните состояние полученными данными
Что-то вроде :
const BoardView = ({ datas, showTask, taskInfo }) => {
const [filteredList, setFilteredList] = useState(datas);
const listColumns = {
[uuidv4()]: {
name: 'Proposed',
items: filteredList,
},
[uuidv4()]: {
name: 'In Progress',
items: [],
},
[uuidv4()]: {
name: 'Review',
items: [],
},
[uuidv4()]: {
name: 'Done',
items: [],
},
};
useEffect(async () => {
// 1. => Fetching the data using "fetchAPI" or "axios". I have chosen axios as it is easier to work with
const results = await axios.get('API__ENDPOINT')
// 2. => Populate the state of this current component with fetched data
setFilteredList(results)
},[results])
console.log(datas) => data is appearing
return (
<>
<div className='w-full p-8 grid grid-flow-col grid-cols-4 gap-8'>
<DragDropContext
onDragEnd={(result) => onDragEnd(result, columns, setColumns)}
>
{Object.entries(columns).map(([columnId, column], index) => {
return (
<div
style={{
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
}}
key={columnId}
>
{console.log(column.item)} => there's no data
</div>
);
})}
</DragDropContext>
</div>
</>
);
};