React-dnd: طبقة سحب مخصصة تعرض كلاً من نمط HTML والطبقة المخصصة

تم إنشاؤها على ١٦ مايو ٢٠١٧  ·  3تعليقات  ·  مصدر: react-dnd/react-dnd

مرحبًا ، لدي مشكلة حيث يتم عرض طبقة السحب المخصصة الخاصة بي بنمط مخصص ومعرف HTML. في نفس الوقت يتم تحذيري بأنه "لا يمكن استدعاء setState أثناء انتقال التحديث".

هذا هو الكود الخاص بي:

import React from 'react';
import PropTypes from 'prop-types';
import { DragLayer } from 'react-dnd';

import ItemDragPreview from './ItemDragPreview';

const layerStyles = {
    position: 'fixed',
    pointerEvents: 'none',
    zIndex: 200000
};

function getItemStyles(props){
    const {initialOffset, currentOffset} = props;

     if (!initialOffset || !currentOffset) {
        return {
        display: 'none'
        };
    }

    let {x,y} = currentOffset;
    const transform = `translate(${x}px,${y}px)`;
    return{
        transform
    };
}

class CustomDragLayer extends React.Component{
    static propTypes = {
        item: PropTypes.object,
        itemType: PropTypes.string,
        initialOffset: PropTypes.shape({
            x: PropTypes.number.isRequired,
            y: PropTypes.number.isRequired
        }),
        currentOffset: PropTypes.shape({
            x: PropTypes.number.isRequired,
            y: PropTypes.number.isRequired
        }),
        isDragging: PropTypes.bool.isRequired,
    }

    renderItem(type,item){
        return (<ItemDragPreview ruleitem={item}/>);
    }

    render(){
        const {item,itemType,isDragging} = this.props;
        if(!isDragging){
            return null;
        }

        return (
            <div style={layerStyles}>
                <div style={getItemStyles(this.props)}>
                    {this.renderItem(itemType,item)}
                </div>
            </div>
        );
    }

}

let collect = monitor =>{
    return {
        item: monitor.getItem(),
        itemType: monitor.getItemType(),
        currentOffset: monitor.getSourceClientOffset(),
        initialOffset: monitor.getInitialSourceClientOffset(),
        isDragging: monitor.isDragging()
    };
}

export default DragLayer(collect)(CustomDragLayer);

ها هو التحذير:

تحذير: setState (...): لا يمكن التحديث أثناء انتقال الحالة الحالية (مثل داخل render أو منشئ مكون آخر). يجب أن تكون طرق التقديم وظيفة خالصة للدعائم والحالة ؛ الآثار الجانبية للمُنشئ هي مضاد للنمط ، ولكن يمكن نقلها إلى componentWillMount .

أتساءل ما إذا كان هذا خطأ من طرفي أو في نهاية المكتبة.
شكرا!

التعليق الأكثر فائدة

كيف يبدو رمز ItemDragPreview؟ واجهت هذه المشكلة عند محاولة تقديم مكون DragSource.

تأكد من أن ItemDragPreview ليس مصدر DragSource أيضًا. إذا كنت تدير الحالة داخل ItemDragPreview ، فحاول تعطيل ذلك أيضًا. يحلق كل شيء بشكل أساسي باستثناء html / jsx داخل هذا المكون (المكونات). ابدأ بهذه القائمة النظيفة ، ثم أضف الأشياء إليها واحدة تلو الأخرى.

ال 3 كومينتر

كيف يبدو رمز ItemDragPreview؟ واجهت هذه المشكلة عند محاولة تقديم مكون DragSource.

تأكد من أن ItemDragPreview ليس مصدر DragSource أيضًا. إذا كنت تدير الحالة داخل ItemDragPreview ، فحاول تعطيل ذلك أيضًا. يحلق كل شيء بشكل أساسي باستثناء html / jsx داخل هذا المكون (المكونات). ابدأ بهذه القائمة النظيفة ، ثم أضف الأشياء إليها واحدة تلو الأخرى.

تبين أنني اضطررت إلى تغيير معاينة السحب في الموصل أيضًا. كل خير الآن

لدي هذه المشكلة أيضا ، ماذا تقصد "في الموصل"؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات