ReactJS中的setState

贝恩

我是ReactJS的新手,我似乎无法找出为什么以下setState的结果不符合我的预期(即,将值每秒增加1)

import React from 'react';
import ReactDOM from 'react-dom';

class Layout extends React.Component {

    constructor() {
        super();
        this.state = {
            name: "Behnam",
            i: 0
        }
    }

    render() {

        setInterval(() => {
            this.setState({ name : "Behnam" + this.state.i });
            this.setState({ i: this.state.i + 1 });
        }, 1000);

        return (
            <div className="container">
                {this.state.name}
            </div>
        );
    }
}

ReactDOM.render(<Layout />, document.getElementById('app'));

取而代之的是,输出字符串迅速增加(我猜想与react试图保持其虚拟DOM更新一样快)。所以我想知道正确的方法是什么?

或德罗里

每次更改状态时,都将重新渲染组件。因为您是setInterval在render方法中启动的,所以您会得到另一个间隔,该间隔会更改状态并重新渲染,依此类推。

组件移动setIntervalcomponentDidMount,该组件在挂载时仅被调用一次:

import React from 'react';
import ReactDOM from 'react-dom';

class Layout extends React.Component {

    constructor() {
        super();
        this.state = {
            name: "Behnam",
            i: 0
        }
    }

    componentDidMount() { set the interval after the component mounted, and save the reference
        this.interval = setInterval(() => {
            this.setState({ 
                name: `Behnam${this.state.i}`, 
                i: this.state.i + 1
            });
        }, 1000);
    }

    componentWillUnmount() {
        this.interval && clearInterval(this.interval); // clear the interval when the component unmounts
    } 

    render() {
        return (
            <div className="container">
                {this.state.name}
            </div>
        );
    }
}

ReactDOM.render(<Layout />, document.getElementById('app'));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Reactjs 中的 setState 实现

来自分类Dev

ReactJS-数组中对象键的setState

来自分类Dev

如何让setState在Reactjs中同步运行?

来自分类Dev

reactJs setState 更改数组中数组中对象的属性

来自分类Dev

在Reactjs中的setState()之后(使用钩子)未定义

来自分类Dev

Reactjs功能组件中是否存在setState()的同步替代方案

来自分类Dev

将setState设置为ReactJS中的localstorage.getItem

来自分类Dev

ReactJS 后增量在 setState 中不起作用

来自分类Dev

this.setState() 调用在 reactjs 中做什么?

来自分类Dev

如何通过单击 ReactJS 中的按钮正确更新 setState

来自分类Dev

如何调试ReactJS的setState

来自分类Dev

如何在另一个函数中使用.then中的setState作为ReactJS中的参数

来自分类Dev

ReactJS SetState不重新渲染

来自分类Dev

ComponentDidUpdate SetState ReactJS无限循环

来自分类Dev

setState()不更新视图-reactjs

来自分类Dev

问题的setState ReactJS,在todolist的实现

来自分类Dev

ComponentDidUpdate SetState ReactJS无限循环

来自分类Dev

reactjs -- 解决setState异步问题

来自分类Dev

如果我不应该在componentWillUpdate中调用setState,如何更新状态(使用ReactJS)?

来自分类Dev

在ReactJS中,为什么`setState`在同步调用时表现不同?

来自分类Dev

ReactJS中this.state和this.setstate有什么区别?

来自分类Dev

ReactJS setState不适用于方法/函数中的参数/参数

来自分类Dev

无法通过 ReactJS 中的 setState() 将 Font-Awesome 图标添加到按钮

来自分类Dev

卸载子组件抛出无法在 reactjs 中的卸载组件上调用 setstate

来自分类Dev

如何在ReactJS中的setState调用期间有条件地从javascript对象中删除值?

来自分类Dev

具有动态键值的Reactjs @setState

来自分类Dev

webpack ReactJS:位于this.setState的意外令牌

来自分类Dev

reactjs setState不是JSON调用上的函数

来自分类Dev

来自异步回调的ReactJS setState

Related 相关文章

  1. 1

    Reactjs 中的 setState 实现

  2. 2

    ReactJS-数组中对象键的setState

  3. 3

    如何让setState在Reactjs中同步运行?

  4. 4

    reactJs setState 更改数组中数组中对象的属性

  5. 5

    在Reactjs中的setState()之后(使用钩子)未定义

  6. 6

    Reactjs功能组件中是否存在setState()的同步替代方案

  7. 7

    将setState设置为ReactJS中的localstorage.getItem

  8. 8

    ReactJS 后增量在 setState 中不起作用

  9. 9

    this.setState() 调用在 reactjs 中做什么?

  10. 10

    如何通过单击 ReactJS 中的按钮正确更新 setState

  11. 11

    如何调试ReactJS的setState

  12. 12

    如何在另一个函数中使用.then中的setState作为ReactJS中的参数

  13. 13

    ReactJS SetState不重新渲染

  14. 14

    ComponentDidUpdate SetState ReactJS无限循环

  15. 15

    setState()不更新视图-reactjs

  16. 16

    问题的setState ReactJS,在todolist的实现

  17. 17

    ComponentDidUpdate SetState ReactJS无限循环

  18. 18

    reactjs -- 解决setState异步问题

  19. 19

    如果我不应该在componentWillUpdate中调用setState,如何更新状态(使用ReactJS)?

  20. 20

    在ReactJS中,为什么`setState`在同步调用时表现不同?

  21. 21

    ReactJS中this.state和this.setstate有什么区别?

  22. 22

    ReactJS setState不适用于方法/函数中的参数/参数

  23. 23

    无法通过 ReactJS 中的 setState() 将 Font-Awesome 图标添加到按钮

  24. 24

    卸载子组件抛出无法在 reactjs 中的卸载组件上调用 setstate

  25. 25

    如何在ReactJS中的setState调用期间有条件地从javascript对象中删除值?

  26. 26

    具有动态键值的Reactjs @setState

  27. 27

    webpack ReactJS:位于this.setState的意外令牌

  28. 28

    reactjs setState不是JSON调用上的函数

  29. 29

    来自异步回调的ReactJS setState

热门标签

归档