You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

react-beautiful-dnd中Draggable引入draggableProps后样式丢失求助

解决react-beautiful-dnd中Draggable组件覆盖自定义style的问题

你的问题根源在于JSX属性的优先级:{...provided.draggableProps} 内部包含了style属性,它会覆盖你之前声明的style={{backgroundColor: "brown"}}——因为JSX中后出现的同名属性会覆盖前面的。

有两种简单的修复方案:

方案一:合并自定义样式与provided中的样式

将自定义样式和provided.draggableProps.style合并后传入,可灵活控制优先级:

function Card(props: CardProps) {
  const { id } = props;

  return (
    <Draggable draggableId={String(id)} index={0}>
      {provided => (
        <div 
          style={{
            backgroundColor: "brown",
            // 若想让provided的样式优先级更高,把这行移到自定义样式前面
            ...provided.draggableProps.style
          }}
          {...provided.draggableProps}
          {...provided.dragHandleProps}
          ref={provided.innerRef}
        >
          <h2>Hello</h2>
        </div>
      )}
    </Draggable>
  );
}

方案二:调整属性顺序,让自定义style后置

直接把自定义style写在{...provided.draggableProps}之后,利用JSX属性优先级覆盖原有样式:

function Card(props: CardProps) {
  const { id } = props;

  return (
    <Draggable draggableId={String(id)} index={0}>
      {provided => (
        <div 
          {...provided.draggableProps}
          {...provided.dragHandleProps}
          ref={provided.innerRef}
          style={{backgroundColor: "brown"}}
        >
          <h2>Hello</h2>
        </div>
      )}
    </Draggable>
  );
}

两种方案都能解决样式被清空的问题,可根据实际需求选择。

内容的提问来源于stack exchange,提问作者rbits

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 14:18:13