dom – React.js:如何在点击上附加组件?

前端之家收集整理的这篇文章主要介绍了dom – React.js:如何在点击上附加组件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是React的新手,我对某些基本的东西感到困惑.

点击事件后,我需要在DOM渲染DOM后添加一个组件.

我的初步尝试如下,它不起作用.但这是我以为尝试的最好的事情. (为了将jQuery与React混合,提前道歉)

ParentComponent = class ParentComponent extends React.Component {
      constructor () {
        this.addChild = this.addChild.bind(this);
      }

      addChild (event) {
        event.preventDefault();
        $("#children-pane").append(<ChildComponent/>);
      }

      render () {
        return (
          <div className="card calculator">
            <p><a href="#" onClick={this.addChild}>Add Another Child Component</a></p>
            <div id="children-pane">
              <ChildComponent/>
            </div>
          </div>
        );
      }
    };

希望很清楚我需要做什么,希望能帮助我找到合适的解决方案.

解决方法

当您使用React时,不要使用jQuery来操纵DOM.反应组件应呈现给定某种状态时它们应该是什么样子的表示.什么DOM翻译是由React本身照顾.

你想要做的是将链条上的“确定要渲染的状态”存储起来,并将其传递下来.如果你渲染N个孩子,那么这个状态应该由包含你的组件的任何东西“拥有”.例如:

class AppComponent extends React.Component {
    constructor () {
        this.state = {
            numChildren: 0
        };
    }

    render () {
        const children = [];

        for (var i = 0; i < this.state.numChildren; i += 1) {
            children.push(<ChildComponent number={i} />);
        };

        return (
            <ParentComponent addChild={this.onAddChild.bind(this)}>
                {children}
            </ParentComponent>
        );
    }

    onAddChild () {
        this.setState({
            numChildren: this.state.numChildren + 1
        });
    }
}

class ParentComponent extends React.Component {
    render () {
        return (
            <div className="card calculator">
                <p><a href="#" onClick={this.props.addChild}>Add Another Child Component</a></p>
                <div id="children-pane">
                    {this.props.children}
                </div>
            </div>
        );
    }
}

class ChildComponent extends React.Component {
    render () {
        return (
            <div>{"I am child " + this.props.number}</div>
        );
    }
}

猜你在找的HTML相关文章