【问题标题】:How to render `React Component` not to the DOM如何不将“React Component”渲染到 DOM
【发布时间】:2019-01-17 18:30:19
【问题描述】:

假设我想即时渲染 React 组件并获得真正的 DOM 元素以供将来使用

例如,如果我有那个组件:

 function Card({symbol,id,color}){
  return <my-card symbol={} id={} color={color}></my-card>
 }

如何渲染它并获取元素?

也许是这样

 const cardElement = React.render(<Card symbol='4' id=111 color='♥'/>)

我需要真正的元素来玩弄它。做一些测量。然后删除它。

但我认为框架通常需要有某种方法让开发人员在需要时持有真正的 DOM 元素;我的意思是,好的框架应该有办法做到这一点

【问题讨论】:

  • 描述你真正想要完成的事情可能会更好。

标签: javascript reactjs jsx


【解决方案1】:

为什么不使用这样的东西:

const preRender = () => <Card symbol='4' id=111 color='♥'/>

现在你有了Card无状态组件的内容,渲染在preRender变量中

【讨论】:

  • 你所提供的只是回报你所说的。 preRender 变量。但我需要真正的元素来玩它。做一些测量。然后删除它
【解决方案2】:

render 返回组件实例而不是 DOM。正如ReactDOM.renderdocumentation 所说,

在提供的容器中将 React 元素渲染到 DOM 中,然后 返回对组件的引用(或为无状态返回 null 组件)。

如果 React 元素之前被渲染到容器中,这将 对其执行更新并仅根据需要更改 DOM 反映最新的 React 元素。

如果提供了可选的回调,它将在 组件被渲染或更新。

DOM 被渲染到提供的容器元素:

const element = document.createElement('div');
ReactDOM.render(<Card ... />, element);
console.log(element.outerHTML);

如果组件是异步的,则应使用回调来检索对 DOM 的异步更新。

【讨论】:

  • 谢谢。所以你提议将组件渲染为空div?
  • 我当然不提供,因为这可能是必须以另一种方式解决的 XY 问题。这取决于您的需求。已经有一条评论建议使用解释您的问题的详细信息更新问题。
猜你喜欢
  • 2015-11-03
  • 1970-01-01
  • 2020-08-10
  • 2021-03-26
  • 1970-01-01
  • 2022-07-28
  • 2017-11-14
  • 1970-01-01
  • 2020-05-23
相关资源
最近更新 更多