如何使用先前状态更新字符串的状态

Posted

技术标签:

【中文标题】如何使用先前状态更新字符串的状态【英文标题】:How to update the state of a string using previous state 【发布时间】:2020-11-27 01:15:15 【问题描述】:

我是 React 和 javascript 的新手。我有一个类组件,其构造函数和函数如下所示:

class MyComponent extends Component 
constructor(props) 
    super(props)
    this.state = 
       htmlTable : ""  
    
createGrid ()

    for(let row = 0; row <= 20;row++)
    
        let currentHTMLRow = `<tr id = "Row $row">`;
        for(let col = 0; col < 50; col++)
        
            let newNodeId = `$row_$col`;
            let NodeClass = "unvisited";
            currentHTMLRow = currentHTMLRow +`<td id = "$newNodeId" class = "$NodeClass"></td>`
        
        this.state.HTMLTable += `$currentHTMLRow</tr>`;
    
    let chart = document.getElementById("grid");
    chart.innerHTML = this.state.HTMLTable;


这会产生预期的效果,但我已被警告不要像这样更改状态的值

this.state.HTMLTable += `$currentHTMLRow</tr>`;

*如何在每次循环迭代时使用 setState() 更改 HTMLTable 字符串的状态:this.state.HTMLTable += $currentHTMLRow&lt;/tr&gt;; *

【问题讨论】:

您不需要在循环中设置状态,但最后,您可以分享完整的代码以更好地理解您的代码。 【参考方案1】:

使用先前状态更改状态的方式是这样的:

this.setState(prevState => 
   return HTMLTable: prevState.HTMLTable + whatever you want;
);

【讨论】:

【参考方案2】:

你不应该在 React 的循环中使用 setState 函数。 通过查看您的代码,您不需要循环内的状态变量。您可以做的是拥有一个局部变量,在循环内对其进行更新,最后将其存储回状态。

class MyComponent extends Component 
constructor(props) 
    super(props)
    this.state = 
       HTMLTable : ""  
    
createGrid () 
    let HTMLTable = ""; // Use local varibale
    for(let row = 0; row <= 20;row++)
      
          let currentHTMLRow = `<tr id = "Row $row">`;
          for(let col = 0; col < 50; col++)
          
              let newNodeId = `$row_$col`;
              let NodeClass = "unvisited";
              currentHTMLRow = currentHTMLRow +`<td id = "$newNodeId" class = "$NodeClass"></td>`
          
          HTMLTable += `$currentHTMLRow</tr>`;
      
      this.setState(HTMLTable); // Store it back to the state.
      let chart = document.getElementById("grid");
      chart.innerHTML = HTMLTable;
    

【讨论】:

【参考方案3】:

最简单的方法:

this.setState(
    HTMLTable: this.state.HTMLTable+=currentHTMLRow
);

【讨论】:

请在你的答案中添加一些解释,只有一个 sn-p 并不能使它成为一个好的答案。

以上是关于如何使用先前状态更新字符串的状态的主要内容,如果未能解决你的问题,请参考以下文章

更新反应状态而不覆盖先前的状态

反应挂钩以根据先前的状态值更新状态[重复]

它们是使用包含更新的道具和先前状态的 useState 钩子来更新状态的功能形式吗?

如何访问实体的先前状态?

数组元素未更新到与其先前状态相反的状态

React JS:setState中的previousState在状态更新后不保留先前状态的数据