Я следил за официальным курсом по яйцеголовому (https://egghead.io/lessons/react-reorder-a-list-with-react-beautiful-dnd и пример рабочего кода: https://codesandbox.io/s/52p60qqlpp) и написал это:
https://codesandbox.io/s/00k3rwq3qn
Однако на самом деле это не перетаскивание. Я просмотрел несколько примеров и не могу найти проблему в своем коде. Буду очень признателен, если кто-нибудь ответит на мою ошибку.
Спасибо
Я не думаю, что использование встроенных стилей так хорошо работает с Draggable
в react-beautiful-dnd
. Если вы хотите применить стиль к компоненту Task
, вы должны использовать styled-components
, этот пример показывает, как он работает, если вы удалите конфигурацию встроенного стиля https://codesandbox.io/s/6lq0854m6r.
Скорее используйте стилизованные компоненты
import React from "react";
import styled from "styled-components";
import { Draggable } from "react-beautiful-dnd";
const Container = styled.div`
margin: 10px;
border: 1px solid black;
`;
export default class Task extends React.Component {
render() {
return (
<Draggable draggableId = {this.props.task.id} index = {this.props.index}>
{(provided, snapshot) => (
<Container
{...provided.draggableProps}
{...provided.dragHandleProps}
ref = {provided.innerRef}
>
{this.props.task.content}
</Container>
)}
</Draggable>
);
}
}
Обновлено:
Кажется, вы можете применить встроенные стили к перетаскиваемому, но тогда вам следует расширить DraggableProps.styles
внутри дочерней функции компонента Draggable
, см. здесь.
{(provided, snapshot) => (
const style = {
margin: "10px",
border: "1px solid black",
...provided.draggableProps.style,
};
return <div
{...provided.draggableProps}
{...provided.dragHandleProps}
ref = {provided.innerRef}
style = {style}
>
{this.props.task.content}
</div>
)}
Отлично, смотрите мое редактирование выше об использовании встроенных стилей, вам просто нужно расширить перетаскиваемые стили, если вы предпочитаете встроенные стили :).
@IanLoubser прав. Вы можете использовать встроенные стили, вам просто нужно обязательно применить перетаскиваемые встроенные стили - автор react-beautiful-dnd
Для тех, кто столкнулся с тем, что перетаскиваемые объекты не двигаются без каких-либо ошибок, это может быть решением. Спасибо, Ян.
Ответ @Ian не сработал для меня. Поэтому я проверил react-beautiful-dnd
документы и придумал другой обходной путь для решения проблемы:
const styles = {
backgroundImage: `url(${background.MEDIUM})`,
backgroundSize: 'cover',
};
...
{(provided) => {
const otherProps = {
...provided.draggableProps,
style: {
...provided.draggableProps.style,
...styles,
},
};
return (<div
{...otherProps}
{...provided.dragHandleProps}
ref = {provided.innerRef}
>
{this.props.task.content}
</div>)
}}
Если вы пытаетесь создать перетаскиваемый список с функциональным компонентом React, используя официальный документ и не используя библиотеку стилизованных компонентов, тогда он хочет работать. Это даст вам некоторую ошибку. Поэтому примените стиль, используя атрибут className, и тогда ошибка исчезнет, а также начнет работать код.
Спасибо, Ян, я не знал, что встроенные стили вызывают конфликт с dnd. На будущее, файлы className/css работают нормально.