javascript - React App - 我的警告窗口出现两次

标签 javascript html reactjs jsx

我不明白为什么会这样 - 我有一个应用程序,当按下按钮以显示一个集合中越来越多的复活节彩蛋品牌列表时,该应用程序会递增和递减计数器。当计数器达到集合中鸡蛋的最大数量时,我希望出现一个弹出窗口,提示“已达到限制”。弹出窗口出现,但当我单击确定时,相同的弹出窗口再次出现!

React 组件是否在某处被调用了两次?

如果有人有任何想法,将不胜感激。

App.js


    import logo from './logo.svg';
    import Counter from './Counter';
    import EggList from './EggList';
    import './App.css';
    
    function App() {
    
      return (
        <div className="App">
          <Counter></Counter>      
        </div>
      );
    }
    
    export default App;

Counter.js


    import React from 'react';
    import EggList from './EggList';
    
    class Counter extends React.Component {
    
      constructor(props) {
        super(props) 
        this.state = { 
          counter: 0
        }
    
        this.increment = this.increment.bind(this)
        this.decrement = this.decrement.bind(this) 
    
      }
    
      increment(){
        this.setState({ counter: this.state.counter + 1 })
      };
    
      decrement(){
        this.setState({ counter: this.state.counter - 1 })
      };
      
      render() {
        const { counter } = this.state;
        var eggsArray = [
            'Lindt',
            'Creme Egg',
            'Oreo',
            'Cadburys',
            'Mars',
            'Aero'
          ];
        return (
          <div>
            <h1 id="counter">{counter}</h1>
            <button type="button" id="decrement" onClick={this.decrement}>Decrement</button>
            <button type="button" id="increment" onClick={this.increment}>Increment</button>
            <EggList eggs={eggsArray} counter={counter}></EggList>
          </div>
        )
      }
    }
    
    export default Counter;

Egglist.js


    import React from 'react';
    
    class EggList extends React.Component {
        render(){
            var eggs = [];
            var upperlimit = false;
            if(this.props.counter < 0){
                window.alert("Warning: Counter cannot be less than zero");
                
            }
            for(var i = 0; i < this.props.counter; i++){
                console.log("Counter: " + this.props.counter);
                console.log("Total eggs: " + this.props.eggs.length);
                if(this.props.counter > this.props.eggs.length){
                    upperlimit = true;
                    break;
                }                    
                eggs.push(<li key={i.toString()}>{this.props.eggs[i]}</li>);
            }
            if(upperlimit === true){
                console.log('upperlimit');
                window.alert("Warning: Counter exceeds number of eggs");
                
            }
           
        
        
            return (
    
    
                <ul className="egg-list">
                    {eggs}
                </ul>
            )
       } 
    }
    
    export default EggList;



谢谢,

罗伯特

英国伦敦

最佳答案

你的 index.js 有标签严格模式吗? 如果是这种情况,请将其删除并重试。

ReactDOM.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
  document.getElementById('root')
);

试试这个:

ReactDOM.render(
  <App />,
  document.getElementById('root')
);

关于javascript - React App - 我的警告窗口出现两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66263996/

相关文章:

javascript - 获取具有 KnockoutJs 提交绑定(bind)的对象

Javascript/JQuery - 如何获取特定子元素的数量

javascript - CKEditor,带有 child 的自定义对象

javascript - JS : Compare strings of an array with object fields

php - 单击按钮时在另一个页面上显示值,在PHP中,值存储在数据库中

javascript - 使特定部分标记为窗口的 100% 宽度和高度

javascript - 使用 JS 设置 SVG 元素的属性不起作用

reactjs - 在 create-react-app 中安装 babel-plugin-styled-components

javascript - react 中没有构造函数的初始状态

javascript - 正确改变 react 组件状态