J'ai un texte déplaçable, mais je souhaite afficher ce texte avec une largeur/hauteur égale à environ 20% de sa taille réelle. Je me demande comment je suis censé redimensionner ou appliquer un style à la capture d'écran d'aperçu. Je ne sais pas comment cibler la capture d'écran elle-même. Y a-t-il un moyen?
Consultez la documentation de DragLayer (http://gaearon.github.io/react-dnd/examples-drag-around-custom-drag-layer.html)
Hé, j'ai un problème similaire - je veux donner une image pour l'aperçu du glissement et réagir, le dnd le rend trop gros - j'ai essayé de définir la taille de l'image avec largeur/hauteur et style.w/h avant de passer à connectDragPreview sans effet. J'ai passé au peigne fin la documentation et je n'ai trouvé aucune mention du redimensionnement de l'image d'aperçu. L'élément html réel qui affiche l'image dans ce cas est enfoui profondément dans un composant de bibliothèque de sorte qu'il n'est pas facilement accessible non plus, donc la solution la plus simple serait si connectDragPreview/dragPreview pouvait exposer une option de redimensionnement (ou encore mieux respecter le dimensionnement de l'image est passée).
voici du code qui ne fonctionne pas - la définition de la largeur et de la hauteur de l'image n'a aucun effet, que ce soit dans la fonction onload ou dans la fonction setDragImage :
composantDidMount = () => {
this.setDragImage();
} ;
componentDidUpdate = () => {
this.setDragImage();
} ;
setDragImage = () => {
image const = nouvelle Image();
image.src = this.props.imgUrl;
image.onload = () => {
image.largeur = image.hauteur = 35;
this.props.connectDragPreview(image);
}
} ;
Une mise à jour sur ce problème?
Vous pouvez y parvenir sur l'élément de moniteur.
Dans la spécification DragSource dans beginDrag
qui est utilisé pour définir l'élément de moniteur, vous obtenez l'instance de composant de réaction en tant que troisième argument et l'ajoutez à l'élément. Plus tard, en utilisant findDOMNode
vous pouvez obtenir un nœud réel.
Donc, ajoutez d'abord l'instance de composant à l'élément.
beginDrag({ id }, monitor, component) {
return {
id,
component
};
},
Plus tard dans le DragLayer, vous avez besoin de l'élément.
const CustomDragLayer = DragLayer(monitor => ({
item: monitor.getItem(),
isDragging: monitor.isDragging() // useful
}))(CustomDragLayer);
Maintenant, dans les accessoires CustomDragLayer, vous recevrez un élément qui aura un composant.
class CustomDragLayer extends Component {
constructor(props) {
super(props);
this.width;
this.height;
// Now you can eacily get height or width from node
const node = findDOMNode(props.item.component);
console.log(node.clientWidth);
}
...
Remarquez comment findDOMNode
est dans le constructor
, il ne peut pas être utilisé dans le render
et dans la plupart des cas, il n'y a pas de besoin réel, Drag Source a probablement une taille statique.
@MrBr , merci ça marche.
Ce problème a été automatiquement marqué comme obsolète car il n'a pas eu d'activité récente. Il sera fermé si aucune autre activité ne se produit. Merci pour vos contributions.
Commentaire le plus utile
Vous pouvez y parvenir sur l'élément de moniteur.
Dans la spécification DragSource dans
beginDrag
qui est utilisé pour définir l'élément de moniteur, vous obtenez l'instance de composant de réaction en tant que troisième argument et l'ajoutez à l'élément. Plus tard, en utilisantfindDOMNode
vous pouvez obtenir un nœud réel.Donc, ajoutez d'abord l'instance de composant à l'élément.
Plus tard dans le DragLayer, vous avez besoin de l'élément.
Maintenant, dans les accessoires CustomDragLayer, vous recevrez un élément qui aura un composant.
Remarquez comment
findDOMNode
est dans leconstructor
, il ne peut pas être utilisé dans lerender
et dans la plupart des cas, il n'y a pas de besoin réel, Drag Source a probablement une taille statique.