margox / braft-editor

美观易用的React富文本编辑器,基于draft-js开发
MIT License
4.6k stars 595 forks source link

图片回显后无法显示,图片格式回显错误的解决方案 #957

Open mafx1024 opened 2 years ago

mafx1024 commented 2 years ago

版本信息: "react": "^17.0.1", "react-dom": "^17.0.1", "braft-editor": "^2.3.9",

问题描述: 富文本中上传图片,给图片设置右浮动(左浮动、左中右对齐)之后,调用editor.toHTML(),把生成的html结构给后端,然后富文本编辑回显的时候,有几个问题

const formatValue = val.replace(/media-wrap/g, '') // 处理图片无法显示

然后渲染到真实的HTML中

function setStyleOfImagesParent(imagesParentClassName): void { const bfImageList = document.getElementsByClassName('bf-image') imagesParentClassName.forEach((className, i) => { const beImageParentsParents = bfImageList[i]?.parentElement?.parentElement // 这里处理了五种情况分别是 左右浮动和左中右对齐 if (className?.includes('float-left')) { beImageParentsParents?.setAttribute('class', bff-left) return } if (className?.includes('float-right')) { beImageParentsParents?.setAttribute('class', bff-right) return }

  if (className?.includes('algin-left')) {
    bfImageList[i]?.setAttribute('style', 'float: left;')
    return
  }

  if (className?.includes('algin-right')) {
    bfImageList[i]?.setAttribute('style', 'float: right;')
    return
  }

  if (className?.includes('align-center')) {
    bfImageList[i]?.setAttribute('style', 'text-align: center;')
    return
  }
})

}

应该什么时候调用

useEffect(() => { if (imagesParentClassName.length !== 0) { setStyleOfImagesParent(imagesParentClassName) } }, [imagesParentClassName])



这个问题的根本原因是,在图片回显的时候,拿到对应的html结构,用```BraftEditor?.createEditorState?.(val)```处理之后,就有了问题;希望作者有时间可以解决下,我这种方案为临时处理方案;

======
还有一种方案不要给后端toHTML,可以换成toRaw试试,由于项目问题,无法实践。