当前位置: 首页 > 面试题库 >

我如何使用ES6在React组件中保持状态

麻和雅
2023-03-14
问题内容

我试图在ES6中使用有状态的React组件,但是当我定义一个构造函数时,在多次渲染该组件(从其父对象)时,构造函数将仅被调用一次。示例如下所示。

class SubComponent extends React.Component {
  constructor(props) {
    super(props);
    console.log("Creating sub component");
    this.state = { count: props.count };
  }

  render() {
    console.log("Rendering sub component", this.state.count);
    return (<div>count: {this.state.count}</div>);
  }
}

class App extends React.Component {
  constructor(props) {
    super(props);
    console.log("Creating app");
    this.state = { count: 0 };
    this.tick = this.tick.bind(this);
    setInterval(this.tick, 1000);
  }

  tick() {
    this.setState({ count: this.state.count + 1 });
  }

  render() {
    console.log("Rendering app", this.state.count);
    return (<SubComponent count={this.state.count} />);
  }
}

这不会更新渲染的输出(它将始终为count: 0),但是日志将输出:

Creating app
Rendering app 0
Creating sub component
Rendering sub component 0
Rendering app 1
Rendering sub component 0
Rendering app 2
Rendering sub component 0
Rendering app 3
Rendering sub component 0
...

这是一个JSFiddle:http :
//jsfiddle.net/jor0xu1a/1/

我知道该示例SubComponent不需要状态,但是我尝试使其尽可能简单以显示我的问题。

我想念什么?


问题答案:

我建议阅读getInitialState是Anti-
Pattern中的Props

基本上,尽可能少的组件应该具有状态。正如其他答案已经说过的,在您的情况下,您可以仅使用this.props.count引用当前值。似乎没有任何理由SubComponent应该具有自己的状态。

但是,如果您确实想根据收到的道具计算组件的状态,则有责任使用生命周期方法使它们保持同步componentWillReceiveProps

componentWillReceiveProps(nextProps) {
    this.setState({count: nextProps.count});
}


 类似资料:
  • 我有一个带有复选框的列表,我在中应用了相同的行为 我的问题是,如果我先选中活动中的复选框,然后通过(模拟从服务器下载新数据)删除第一项,然后再次渲染,则选中第二个活动中的复选框。 当它不附加到实例时,的目的是什么。渲染工作正常,因为在控制台中打印的,所以被从第一运动移动到第二运动。

  • 问题内容: 在花了一些时间学习React之后,我了解了创建组件的两个主要范例之间的区别。 我的问题是,什么时候应该使用哪个?为什么?一个人相对于另一个人的利益/取舍是什么? ES6课程: 功能性: 我认为只要没有状态可以由该组件操纵,功能就可以了,是吗? 我猜如果我使用任何生命周期方法,最好使用基于类的组件。 问题答案: 你有正确的主意。如果您的组件只做一些道具和渲染,那么功能就可以了。您可以将它

  • 在花了一些时间学习React之后,我理解了创建组件的两种主要模式之间的差异。 我的问题是什么时候我应该使用哪一个,为什么?一种方法与另一种方法相比有哪些好处/利弊? ES6类: 功能: 我认为只要没有状态可被该组件操纵,就可以正常工作,但就这样吗? 我想如果我使用任何生命周期方法,最好使用基于类的组件。

  • 问题内容: 我在玩和使用和。我想在不同的文件中构建多个组件,将其导入单个文件并将其捆绑在一起 假设我有几个这样的组件: my-navbar.jsx main-page.jsx 使用webpack并按照其教程进行操作,我有: 构建项目并运行它之后,在浏览器控制台中出现以下错误: 我究竟做错了什么?如何正确导入和导出组件? 问题答案: 尝试 默认设置 组件中的导出: 通过使用默认值,您表示将成为该模块

  • 我需要使用父组件中子组件内部的状态值。 组成部分: 这是父组件:

  • 本文向大家介绍react开发中如何使用require.ensure加载es6风格的组件,包括了react开发中如何使用require.ensure加载es6风格的组件的使用技巧和注意事项,需要的朋友参考一下 其实用的babel,在浏览器端就应该可以加载,之前少了个default: 以下方式也可以,但是比较low,可以作废了: 1、问题提出:想通过require.ensure加载es6风格的模块?