javascript - 组件渲染时 React 调用 api 运行两次

标签 javascript reactjs

我一直在研究 react 和搜索,但没有找到任何答案。
所以我有这个组件调用我的 api 来知道在呈现它时要做什么。
问题是它被渲染了两次,我想知道这是否可以,因为我是在告诉组件自行更新,或者我是否做错了什么。
根据我的搜索,如果调用 setState,渲染就会运行,但我仍然觉得这有点奇怪,可能是因为我是 React 的新手,但我想把事情搞清楚。

例子:

class Car extends React.Component {
  constructor() {
    super();
    this.state = {
      color:'none',
    };
  }

  componentDidMount(){
    this.updateColor();
  }

  updateColor() {
    this.setState(() => {
      return { color: 'red'}
    });
  }

  render() {
    console.log("potatoes");
    return (
      <div>        
        <h1>Car color: {this.state.color}</h1>
      </div>
    );
  }
}

React.render(<Car />, document.getElementById('app'));

代码笔链接:
https://codepen.io/jorgemdss/pen/qBEqroE?editors=0010

如果您打开开发工具,您会看到“potatoes”被记录了两次。
这是完全正常的还是我做错了什么?

最佳答案

这是完全正常的。

第一次渲染是在组件挂载时,第二次是在运行 componentDidMount 并调用 updateColor 时更新状态并再次渲染。

您可能看不到,但您的组件将呈现nonered 之后。

关于javascript - 组件渲染时 React 调用 api 运行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59361867/

相关文章:

reactjs - 跨站点 cookie 问题 : how to set cookie from backend to frontend

javascript - React.JS = Promise/Fetch API 有重复代码,我如何捆绑到它自己的函数中

javascript - ReactJS:使用 JSX 以编程方式更改组件标签

javascript - 想要生成唯一的数字 id,不能使用 node-uuid 因为后端需要数字 id

javascript确认()确定和取消返回相同的结果

javascript - 当 Material UI 选项卡包裹在另一个组件内时,它会失去与选项卡的连接

javascript - react Hook : toggle element on map function

javascript - 在刷新页面时记住类名

javascript - jquery 插件 "jStepper"- 不适合我

javascript - 在切换按钮中将我的内部 div 切换到另一侧