javascript - 如何在 React 中附加到 dom?

标签 javascript reactjs

Here's a js fiddle显示实际的问题。

在组件的渲染函数中,我渲染了一个带有 .blah 类的 div。在同一组件的 componentDidMount 函数中,我希望能够选择类 .blah 并像这样附加到它(因为组件已经安装)

$('.blah').append("<h2>Appended to Blah</h2>");

但是,附加的内容不会显示。我还尝试(也在 fiddle 中显示)以相同的方式追加,但从父组件追加到子组件,结果相同,从子组件追加到父组件的空间,结果相同。我尝试后者的逻辑是,可以更确定 dom 元素已被渲染。

与此同时,我能够(在 componentDidMount 函数中)getDOMNode 并附加到那个

 var domnode = this.getDOMNode(); 
 $(domnode).append("<h2>Yeah!</h2>")

但是我希望能够使用我知道的类附加到 div 来处理 CSS 样式的原因。此外,由于根据 docs getDOMNode 已弃用,并且不可能使用 getDOMNode 的替代品来做同样的事情

 var reactfindDomNode = React.findDOMNode();
 $(reactfindDomNode).append("<h2>doesn't work :(</h2>");

我不认为 getDOMNodefindDOMNode 是执行我正在尝试执行的操作的正确方法。

问题是否可以在 React 中附加到特定的 id 或类?我应该使用什么方法来完成我正在尝试做的事情(getDOMNode,即使它已被弃用?)

var Hello = React.createClass({
    componentDidMount: function(){

       $('.blah').append("<h2>Appended to Blah</h2>");
       $('.pokey').append("<h2>Can I append into sub component?</h2>");
       var domnode = this.getDOMNode();
       $(domnode).append("<h2>appended to domnode but it's actually deprecated so what do I use instead?</h2>")

       var reactfindDomNode = React.findDOMNode();
       $(reactfindDomNode).append("<h2>can't append to reactfindDomNode</h2>");

    },
    render: function() {
        return (
            <div class='blah'>Hi, why is the h2 not being appended here?
            <SubComponent/>
            </div>
        )
    }
});

var SubComponent = React.createClass({

      componentDidMount: function(){
         $('.blah').append("<h2>append to div in parent?</h2>");
      },

      render: function(){
         return(
              <div class='pokey'> Hi from Pokey, the h2 from Parent component is not appended here either?            
              </div>
         )
      }
})

React.render(<Hello name="World" />, document.getElementById('container'));

最佳答案

在 JSX 中,你必须使用 className,而不是 class。控制台应显示有关此的警告。

固定示例:https://jsfiddle.net/69z2wepo/9974/

您错误地使用了 React.findDOMNode。你必须向它传递一个 React 组件,例如

var node = React.findDOMNode(this);

将返回组件本身的 DOM 节点。

然而,正如已经提到的,你真的应该避免在 React 之外改变 DOM。重点是根据组件的状态和属性一次描述 UI。然后更改状态或 Prop 以重新渲染组件。

关于javascript - 如何在 React 中附加到 dom?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30721836/

相关文章:

json - 将 xml react 为 json 解析和迭代

reactjs - RTK查询拦截多个请求

javascript - 在 React 中使用不可变状态有什么缺点?

javascript - 使用for循环的变量

javascript - 为什么我的 javascript if 语句不以数组为目标?

javascript - 连接 vendor js 文件的最佳方法是什么?

javascript - 如何使用 jQuery 制作可交换的 div 'ui cards'?

javascript - 为什么显示函数未定义?它确实将结果记录在控制台中,我只是想列出名字

javascript - React perf 总是打印空数组

javascript - 如何使用 lodash map/countBy/groupBy 处理 JSON 字段?