javascript - 如何在React中做vanilla js等效的appendChild?

标签 javascript reactjs jsx appendchild

我已经写过this普通 js 中的钢笔。现在我想在我的 react 组件中使用它。

renderPDF(url, canvasContainer, options) {
  options = options || {
    scale: 1
  };

  function renderPage(page) {
    var viewport = page.getViewport(options.scale);
    var wrapper = document.createElement("div");
    wrapper.className = "canvas-wrapper";
    var canvas = document.createElement("canvas");
    var ctx = canvas.getContext("2d");
    var renderContext = {
      canvasContext: ctx,
      viewport: viewport
    };
    canvas.height = viewport.height;
    canvas.width = viewport.width;
    wrapper.appendChild(canvas);
    canvasContainer.appendChild(wrapper);

    page.render(renderContext);
  }

  function renderPages(pdfDoc) {
    for (var num = 1; num <= pdfDoc.numPages; num++)
      pdfDoc.getPage(num).then(renderPage);
  }
  PDFJS.disableWorker = true;
  PDFJS.getDocument(url).then(renderPages);
}

当我在 React 的 componentDidMount 生命周期中使用上述渲染函数时,收到错误 Cannot read property 'appendChild' of null

请指导我以react方式编写上述函数?

这是我当前的 code-sandbox

最佳答案

由于this.state = {visible: false};,您的模态组件无法首次渲染所以.modal-container第一次渲染时不存在。仅在您单击“打开”按钮后才会呈现。

为了避免这种情况,您可以将 pdf 创建逻辑移动到单独的组件中,并在 <Modal> 内渲染此组件。 。这是一个example

关于javascript - 如何在React中做vanilla js等效的appendChild?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48924067/

相关文章:

javascript - 为什么使用当前状态作为参数时this.state中的()

javascript - 带日期选择器的 Acrobat PDF 表单

javascript - 位图到 svg 路径

node.js - TypeError : (0 , _schemaUtils.default) 不是函数

javascript - React+Redux 中的路由状态名

reactjs - 为什么 ReactJS 需要编译

javascript - Click 事件不适用于动态生成的 span 元素的 id

javascript - 如何在页面滚动时滚动按钮

javascript - React.js 多个独立模块的最佳工作流程

javascript - React 不从 url 加载图像