在 ReactJs 项目中,我尝试使用com.wiris.js.JsPluginViewer.parseElement(ref, true, function () {});
函数进行解析。
根据文档,该功能将应用于 DOM 上的特定元素。在纯javascript的示例中,他们首先设置dom元素的innerHTML,然后应用该函数。
所以我认为它会在 React 中使用 refs 来处理。(不确定它是否是最好的方法)
我有一个数组,其中包含一些要呈现为 html 的字符串。我将所有参考作为一个数组,useRef([])
然后使用设置每个元素的参考refs.current[index]
根据类型,我直接使用dangerouslySetInnerHTML
或使用包装器组件渲染字符串,以使用我将使用该特殊功能的子组件进行渲染。
但是在 WirisWrapper 中应用该函数之前,我无法达到 ref 的 innerHTML 属性。我试过ref.innerHTML
了ref.current.innerHTML
解析器作为父级
import { useRef, createRef } from 'react';
import WirisWrapper from './WirisWrapper';
const Parser = ({ itemsArray }) => {
let refs = useRef([]);
refs.current = itemsArray.map((ref, index) => (refs.current[index] = createRef()));
return (
<div>
{itemsArray.map((item, index) =>
item.type === 'math' ? (
<WirisWrapper
ref={el => (refs.current[index] = el)}
key={index}
mString={item.html}
/>
) : (
<div key={index} dangerouslySetInnerHTML={{ __html: item.html}}>
</div>
)
)}
</div>
);
};
export default Parser;
WirisWrapper 作为孩子
import { forwardRef, useEffect } from 'react';
const WirisWrapper = forwardRef((props, ref) => {
const { mString } = props;
useEffect(() => {
if (ref.current && com.wiris.js.JsPluginViewer) {
ref.current.innerHTML = mString;
com.wiris.js.JsPluginViewer.parseElement(ref, true, function () {});
}
}, [ref, com.wiris.js.JsPluginViewer]);
return <div ref={ref}></div>;
});
export default WirisWrapper;