Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数组上的.pop()/slice。()无效。需要计数工作-Javascript_Javascript_Arrays_Reactjs - Fatal编程技术网

数组上的.pop()/slice。()无效。需要计数工作-Javascript

数组上的.pop()/slice。()无效。需要计数工作-Javascript,javascript,arrays,reactjs,Javascript,Arrays,Reactjs,真的很难对付这个 我正在用ReactJS建立一个捐赠表格。表单位于另一个组件中,但可以正常工作。我可以做到以下几点: 提交捐款号码/金额 通过handleChange收集,然后将其设置为“捐赠”状态 我能算出捐款总额 完成价值200英镑的交易需要多少钱 每次捐款时,在进度条上添加一些div。让它看起来好像酒吧已经客满了 然而,停止工作的是我统计的捐款数量。我所做的只是调用捐赠阵列的长度,以表示阵列中有多少捐赠: <div className="columns"> <

真的很难对付这个

我正在用ReactJS建立一个捐赠表格。表单位于另一个组件中,但可以正常工作。我可以做到以下几点:

  • 提交捐款号码/金额
  • 通过handleChange收集,然后将其设置为“捐赠”状态
  • 我能算出捐款总额
  • 完成价值200英镑的交易需要多少钱
  • 每次捐款时,在进度条上添加一些div。让它看起来好像酒吧已经客满了
  • 然而,停止工作的是我统计的捐款数量。我所做的只是调用捐赠阵列的长度,以表示阵列中有多少捐赠:

       <div className="columns">
        <div className="column">
          <p>Only 3 days left to fund this project.</p>
          <p>Join the <strong>**{donated.length}**</strong> other donors who have already supported this project. Every dollar helps.</p>
          {/* <div>
            <ul>
              {donated.map((donated, i) => <li key={i}>{donated}</li>)}
            </ul>
          </div> */}
        </div>
      </div>
    
    
    这个项目只剩下3天的资金了

    加入**{捐赠的.length}**其他已经支持该项目的捐赠者。每一美元都有帮助

    {/*
      {捐赠的.map((捐赠的,i)=>
    • {捐赠的}
    • )}
    */}
    但是,当我在app.js中的数组上应用.pop()时,我的所有数组都会减少到数组中的最后一个值。因此,我的长度不起作用

    我已尝试在this.state.com上使用.slice(0)复制数组,但无法使其正常工作。我基本上遇到了同样的问题。或者它给我发了捐款美元的短信。把数字加倍,把我的总数弄乱了

    我需要.pop(-1),这样我的进度条就可以填满了,这取决于提交的数量。请帮忙?看来是missy,我已经把代码转移了。其中一个有效,另一个则取决于我在哪里转换代码

    很高兴有一个基本的DOM操作函数!我只想数一数有多少人点击提交/捐款。在这上面花了5个小时

    多谢各位。 丽娜

    从“React”导入React;
    从“react dom”导入react dom;
    从“./components/ProgressBar”导入ProgressBar;
    从“./components/Form”导入表单;
    类应用程序扩展了React.Component{
    构造函数(){
    超级();
    此.state={
    编号:'',
    捐赠:[],
    总额:[],
    总数:0,
    剩余:200,
    计数:0
    };
    this.handleChange=this.handleChange.bind(this);
    this.handleSubmit=this.handleSubmit.bind(this);
    //我们需要绑定,否则这是未定义的
    }
    //处理函数
    手变(e){
    this.setState({number:e.target.value},()=>console.log('number',this.state.number));
    }
    handleSubmit(e){
    e、 预防默认值();
    this.setState({investate:this.state.investate.concat(this.state.number).map(number)},()=>console.log('investate',this.state.investate));
    this.setState({sum:this.state.concat(this.state.number).map(number)},()=>{
    console.log('SUM',this.state.SUM);
    //用于计算捐赠总额的函数
    常量数=this.state.sum;
    功能添加(a、b){
    返回a+b;
    }
    //数组中数字的总值
    常量计算=数字。减少(增加,0);
    控制台日志('CALC',CALC);
    this.setState({total:calc});
    //剩余款项的计算
    this.setState({remaining:this.state.remaining-calc},()=>console.log('remaining',this.state.remaining));
    //循环以打印进度条条目
    for(var i=0;i
    您可以添加另一个计数器,并为每次捐赠增加它。
    使用此计数器获取捐赠数量,而不是使用数组长度。

    我可以看到您正在设置state.numbers和state.remaining,但当您对numbers var运行reduce函数时,实际上state.sum不是state.sum只是空的,因为您只在handleChange函数中设置state.numbers?No sum不是空的,这基本上是一个捐赠的副本…这里是什么,我正在尝试-我想探索这个选项,如果有人可以帮助我正确的代码。。。常量计数器=this.state.count+1;document.querySelector('.tally').innerHTML=计数器;每次进行新的捐赠时,您都必须像这样递增计数器。state.counter++作为计数器必须更改,它不能是const。提示一下,您不应该直接修改您的状态。您可能需要这样做:
    this.setState({counter:this.state.counter+1})
    import React from 'react';
    import ReactDOM from 'react-dom';
    
    import ProgressBar from './components/ProgressBar';
    import Form from './components/Form';
    
    class App extends React.Component {
    
    constructor() {
      super();
    
     this.state = {
      number: '',
      donated: [],
      sum: [],
      total: 0,
      remaining: 200,
      count: 0
    };
    
    this.handleChange = this.handleChange.bind(this);
    this.handleSubmit = this.handleSubmit.bind(this);
    // we need to bind otherwise this is undefined
    }
    
    //HANDLE FUNCTIONS
      handleChange(e) {
    this.setState({ number: e.target.value }, () => console.log('NUMBER', this.state.number));
    }
    
     handleSubmit(e) {
      e.preventDefault();
      this.setState({donated: this.state.donated.concat(this.state.number).map(Number)}, () => console.log('DONATED', this.state.donated));
    
    
     this.setState({sum: this.state.donated.concat(this.state.number).map(Number)}, () => {
      console.log('SUM', this.state.sum);
    
      // FUNCTION TO CALCULATE TOTAL DONATIONS
      const numbers = this.state.sum;
      function add(a, b) {
        return a + b;
      }
    
      // TOTAL VALUE OF NUMBERS IN THE ARRAY
      const calc = numbers.reduce(add, 0);
      console.log('CALC', calc);
      this.setState({total: calc});
    
      // CALCULATION FOR MONIES REMAINING
      this.setState({remaining: this.state.remaining - calc}, () => console.log('REMAINING', this.state.remaining));
    
    
      // LOOP TO PRINT OUT PROGRESS BAR ENTRIES
      for (var i = 0; i < this.state.donated.length; i++) {
        if (i < 200) {
          // div +1;
          const div = document.createElement('div');
          div.style.background = 'red';
          div.style.width = this.state.donated.pop() * 2 + 'px';
          div.style.height = '50px';
          div.style.float = 'left';
          document.querySelector('.bar').appendChild(div);
        }
      }
    
      document.forms['id_form'].reset();
    });
    }
    
    render() {
    
    return (
      <main>
        <section className="section">
          <h1 className="is-size-2">DONATE FOR A GOOD CAUSE</h1>
          <ProgressBar donated={this.state.donated} remaining={this.state.remaining}/>
          <Form donated={this.state.donated} handleChange={this.handleChange} handleSubmit={this.handleSubmit} />
        </section>
      </main>
      );
     }
    }
    
    ReactDOM.render(
    <App />,
    document.getElementById('root')
    );