代码之家  ›  专栏  ›  技术社区  ›  tic

react Dragable无法使用自定义组件

  •  0
  • tic  · 技术社区  · 6 年前

    https://github.com/mzabriskie/react-draggable

    单击时,以下选项起作用

    import React from 'react';
    import { DraggableCore } from 'react-draggable';
    
    export default class Hello extends React.Component {
    
      onStart = () => {
        console.log('here');
      }
    
      render() {
        return (
          <DraggableCore
            onStart={this.onStart}
          >
            <h1>Drag me!</h1>
          </DraggableCore>
        );
      }
    }
    

    但事实并非如此

    import React from 'react';
    import { DraggableCore } from 'react-draggable';
    
    class Test extends React.Component {
      render() {
        return (
          <h1>{this.props.children}</h1>
        );
      }
    }
    
    export default class Hello extends React.Component {
    
      onStart = () => {
        console.log('here');
      }
    
      render() {
        return (
          <DraggableCore
            onStart={this.onStart}
          >
            <Test>Drag me!</Test>
          </DraggableCore>
        );
      }
    }
    

    h1 由于直接使用,它现在使用自定义组件 Test

    https://stackblitz.com/edit/react-ev9iyu?file=Hello.js

    我试着转发参考文献。我也试着把它包装在一个信封里 Fragment

    1 回复  |  直到 6 年前
        1
  •  3
  •   Matt Carlotta    6 年前

    用包装纸包装组件 div 里面 DraggableCore :

    <DraggableCore onStart={this.onStart}>
      <div>
        <Test>Drag me!</Test>
      </div>
    </DraggableCore>
    
        2
  •  0
  •   Allen Vawdrey    4 年前

    https://github.com/react-grid-layout/react-draggable/blob/master/lib/DraggableCore.js . 您的组件需要能够接收这些事件侦听器。

    const Test = ({ children, ...rest }) => {
      return (
        <div {...rest}>{children}</div>
      )
    }
    
    const Hello = () => {
      const handleStart = () => console.log('here');
    
      return (
        <DraggableCore
          onStart={handleStart}
        >
          <Test>Drag me!</Test>
        </DraggableCore>
      );
    }