Draft.js 在拖放位置插入图片
Draft.js insert image at dropped position
我正在尝试从 draft-js 编辑器外部删除图像,但它总是插入到编辑器中 cursor/selection 的最后位置(如果 cursor/selection 未设置,则插入到最后)。
这是我的总结draft-js-drag-n-drop-plugin
const droppableBlockDndPlugin = {
...blockDndPlugin,
handleDrop: (
selection,
dataTransfer,
isInternal,
{getEditorState, setEditorState}
) => {
const editorState = getEditorState();
const raw = dataTransfer.data.getData('text');
const data = raw ? raw.split(IMAGE_BLOCK_TYPE_SEPARATOR) : [];
if (data.length > 1 && data[0] === IMAGE_BLOCK_TYPE_PURE) {
const url = data[1];
if (url) {
const newState = imagePlugin.addImage(editorState, url);
setEditorState(newState);
}
}
return blockDndPlugin.handleDrop(selection, dataTransfer, isInternal, {
getEditorState,
setEditorState
});
}
};
基本上我只是在使用 imagePlugin.addImage
插入图像的基础 handleDrop
发生之前做额外的逻辑。有没有办法把图片放到拖动的位置?
实际上这是非常明显的解决方案 - 您应该只使用传递的 selection
并用它创建新状态,然后将图像添加到该新状态:
const newState = imagePlugin.addImage(EditorState.forceSelection(editorState, selection), url);
setEditorState(newState);
我正在尝试从 draft-js 编辑器外部删除图像,但它总是插入到编辑器中 cursor/selection 的最后位置(如果 cursor/selection 未设置,则插入到最后)。
这是我的总结draft-js-drag-n-drop-plugin
const droppableBlockDndPlugin = {
...blockDndPlugin,
handleDrop: (
selection,
dataTransfer,
isInternal,
{getEditorState, setEditorState}
) => {
const editorState = getEditorState();
const raw = dataTransfer.data.getData('text');
const data = raw ? raw.split(IMAGE_BLOCK_TYPE_SEPARATOR) : [];
if (data.length > 1 && data[0] === IMAGE_BLOCK_TYPE_PURE) {
const url = data[1];
if (url) {
const newState = imagePlugin.addImage(editorState, url);
setEditorState(newState);
}
}
return blockDndPlugin.handleDrop(selection, dataTransfer, isInternal, {
getEditorState,
setEditorState
});
}
};
基本上我只是在使用 imagePlugin.addImage
插入图像的基础 handleDrop
发生之前做额外的逻辑。有没有办法把图片放到拖动的位置?
实际上这是非常明显的解决方案 - 您应该只使用传递的 selection
并用它创建新状态,然后将图像添加到该新状态:
const newState = imagePlugin.addImage(EditorState.forceSelection(editorState, selection), url);
setEditorState(newState);