我们在使用react now时遇到了一些问题,但这与我们使用react的方式有很大关系.

我们应该如何显示/隐藏子组件?

我们就是这样编码的(这只是我们组件的片段)...

_click: function() {
  if ($('#add-here').is(':empty'))
    React.render(<Child />, $('#add-here')[0]);
  else
    React.unmountComponentAtNode($('#add-here')[0]);
},
render: function() {
  return(
    <div>
      <div onClick={this._click}>Parent - click me to add child</div>
      <div id="add-here"></div>
    </div>
  )
}

最近我读了一些例子,好像应该是这样的:

getInitialState: function () {
  return { showChild: false };
},
_click: function() {
  this.setState({showChild: !this.state.showChild});
},
render: function() {
  return(
    <div>
      <div onClick={this._click}>Parent - click me to add child</div>
      {this.state.showChild ? <Child /> : null}
    </div>
  )
}

我应该用那个react 器吗.render()?它似乎阻止了各种各样的事情,比如shouldComponentUpdate个子元素和e.stopPropagation个子元素...

推荐答案

我提供了一个遵循第二种方法的工作示例.更新组件的状态是显示/隐藏子级的首选方式.

假设你有这个容器:

<div id="container">
</div>

您可以使用现代Javascript(ES6,第一个示例)或classic Javascript(ES5,第二个示例)来实现组件逻辑:

Show/hide components using ES6

Try this demo live on JSFiddle

class Child extends React.Component {
  render() {
    return (<div>I'm the child</div>);
  }
}

class ShowHide extends React.Component {
  constructor() {
    super();
    this.state = {
      childVisible: false
    }
  }

  render() {
    return (
      <div>
        <div onClick={() => this.onClick()}>
          Parent - click me to show/hide my child
        </div>
        {
          this.state.childVisible
            ? <Child />
            : null
        }
      </div>
    )
  }

  onClick() {
    this.setState(prevState => ({ childVisible: !prevState.childVisible }));
  }
};

React.render(<ShowHide />, document.getElementById('container'));

Show/hide components using ES5

Try this demo live on JSFiddle

var Child = React.createClass({
  render: function() {
    return (<div>I'm the child</div>);
  }
});

var ShowHide = React.createClass({
  getInitialState: function () {
    return { childVisible: false };
  },

  render: function() {
    return (
      <div>
        <div onClick={this.onClick}>
          Parent - click me to show/hide my child
        </div>
        {
          this.state.childVisible
            ? <Child />
            : null
        }
      </div>
    )
  },

  onClick: function() {
    this.setState({childVisible: !this.state.childVisible});
  }
});

React.render(<ShowHide />, document.body);

Reactjs相关问答推荐

如何等待我的插入内容提交后再继续执行指令?

在一个blog函数中调用setState钩子

Reaction-路由v6动态路径RegExp

Google Firestore无法读取图像-react

当项目开始时,它不会从三元运算符(REACT)加载一些tailwind 类名称

状态更改是否卸载功能组件

设置自定义形状的纹理

如何在一个 Next.js 项目中使用两种布局?

在 useSelector() 中使用 array.map() 如何导致组件在分派操作时重新渲染?

如何在 React 中停止嵌套 Link 和 Button 组件的事件传播?

数据表格组件需要所有行都具有唯一的ID属性.或者,您可以使用getRowId属性.

如何在Next.js应用程序中为路由[slug]生成.html文件?

根据其中的值不同地react setState 更新状态

如何在 ReactJS 中提交后删除 URL 中的查询参数

Reactjs 表单未反映提交时的更改

使用 react-router-dom 时弹出空白页面

使用输入类型文本对 useState 和日期做出react

如何使用 cypress 获取 MUI TextField 的输入值?

将 C# Razor 条件块转换为 React.js 代码

如何在 React 中制作动画?