使用react创建Checkbox的问题

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (50)

我实际上正在尝试创建一个带有反应的复选框,我已经尝试了很多方法,每次它向我显示相同的输出:透明颜色的复选框的标签始终保持在左侧的顶部网页:

创建它的代码:

<div>
   <input type="checkbox" checked={this.state.checked} onChange={this.handleCheckClick}  id="filled-in-box"/>
   <label htmlFor="filled-in-box">Tomate</label>
</div>

handleCheckClick = () => {
    this.setState({ checked: !this.state.checked });
  }

甚至没有复选框的迹象

// @ts-check
import React, { Component } from 'react';
import './Dash.css';
import Filtro from './Filtro.js';
import { Link, Element , Events, animateScroll as scroller } from 'react-scroll'
import Pie from './Pie';
import Chart from './Chart';
import RadioGroup from '@material-ui/core/RadioGroup';
import CheckboxCP from '@material-ui/core/Checkbox';
import { makeStyles } from '@material-ui/core/styles';
import { Checkbox } from "reakit/Checkbox";


class Dash extends Component {

  // Initialize data for use
  constructor(props){
    super(props);
    this.state = {
      kg_user:{},
      alimentos_user:{},
      kg_geral:{},
      alimentos_geral:{}


    }
  }

  handleCheckClick = () => {
    this.setState({ checked: !this.state.checked });
  }

  async callApi_general(){
    let res = await fetch('/colheitas', {
      method: 'POST',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
      }})

    res = await res.json()
    //parsing json
    let Sres = JSON.stringify(res);
    let Jres = JSON.parse(Sres)

    var quantidade_colhida = 0;
    var quantidade_bercos = 0;
    let nome_alimentos = []
    const quant_alimentos = []
    for (var i = 0; i <Jres.length; i++){
      var colheita = Jres[i];
      var Sdados = JSON.stringify(colheita["detalhes_colheita"])
      var Jdados = JSON.parse(Sdados)
      for (var k in Jdados){
        //geral
        quantidade_colhida += parseFloat(Jdados[k]["quantidade"]);
        quantidade_bercos += parseFloat(Jdados[k]["quant_bercos"]);
        //alimentos geral
        if (nome_alimentos.indexOf(k) < 0) {
          nome_alimentos.push(k)
          quant_alimentos.push(parseFloat(Jdados[k]["quantidade"]))
          }
        else{
          var j = nome_alimentos.indexOf(k)
          quant_alimentos[j] += parseFloat(Jdados[k]["quantidade"])
          }
      }
    }


    var kg_geral = {
      labels: ['Total (kg)', 'Berços'],
      datasets:[
        {
          data:[
            quantidade_colhida,
            quantidade_bercos
          ],
          backgroundColor:[
            'rgba(255, 99, 132, 0.8)',
            'rgba(54, 162, 235, 0.8)',
          ]
        }
      ]
    }

    var alimentos_geral = {
      labels: nome_alimentos,
      datasets:[
        {label:'Kg',
          data:quant_alimentos ,
          backgroundColor:[
            'rgba(255, 99, 132, 0.8)',
            'rgba(54, 162, 235, 0.8)',
            'rgba(255, 206, 86, 0.8)',
            'rgba(75, 192, 192, 0.8)',
            'rgba(153, 102, 255, 0.8)',
            'rgba(255, 100, 64, 0.8)',
            'rgba(255, 99, 132, 0.8)',
          ]
        }
      ]
    }
    return [kg_geral,alimentos_geral]
  }



  // Handle's API response for user
  async callApi_user(id){
    let res = await fetch('/colheitas', {
      method: 'POST',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        id_autor: id
      })
    })

    res = await res.json()
    //parsing json
    let Sres = JSON.stringify(res);
    let Jres = JSON.parse(Sres)

    var quantidade_colhida = 0;
    var quantidade_bercos = 0;
    let nome_alimentos = []
    const quant_alimentos = []
    for (var i = 0; i <Jres.length; i++){
      var colheita = Jres[i];
      var Sdados = JSON.stringify(colheita["detalhes_colheita"])
      var Jdados = JSON.parse(Sdados)
      for (var k in Jdados){
        //geral
        quantidade_colhida += parseFloat(Jdados[k]["quantidade"]);
        quantidade_bercos += parseFloat(Jdados[k]["quant_bercos"]);
        //alimentos geral
        if (nome_alimentos.indexOf(k) < 0) {
          nome_alimentos.push(k)
          quant_alimentos.push(parseFloat(Jdados[k]["quantidade"]))
          }
        else{
          var j = nome_alimentos.indexOf(k)
          quant_alimentos[j] += parseFloat(Jdados[k]["quantidade"])
          }
      }
    }


    var kg_user = {
      labels: ['Total (kg)', 'Berços'],
      datasets:[
        {
          data:[
            quantidade_colhida,
            quantidade_bercos
          ],
          backgroundColor:[
            'rgba(255, 99, 132, 0.8)',
            'rgba(54, 162, 235, 0.8)',
          ]
        }
      ]
    }

    var alimentos_user = {
      labels: nome_alimentos,
      datasets:[
        {label:'Kg',
          data:quant_alimentos ,
          backgroundColor:[
            'rgba(255, 99, 132, 0.8)',
            'rgba(54, 162, 235, 0.8)',
            'rgba(255, 206, 86, 0.8)',
            'rgba(75, 192, 192, 0.8)',
            'rgba(153, 102, 255, 0.8)',
            'rgba(255, 100, 64, 0.8)',
            'rgba(255, 99, 132, 0.8)',
          ]
        }
      ]
    }
    return [kg_user,alimentos_user]
  }





  // Calls Api and set State
  async componentWillMount(){
    //var id = null
    var id = this.props.id //---pessoal do login tem que passar id como props
      var data_geral  = await this.callApi_general()
      this.setState({ kg_geral:data_geral[0] , alimentos_geral:data_geral[1]})
    //chama todas colheitas feitas

    // caso haja id(usuário está logado), chama as colheitas feitas pelo usuário
    if(id !== null){
      var data_user  = await this.callApi_user(id)
      this.setState({ kg_user:data_user[0] , alimentos_user:data_user[1]})
    }
  }

  //front
  componentDidMount(){
    Events.scrollEvent.register('begin', function() {
      console.log("begin", arguments);
    });

    Events.scrollEvent.register('end', function() {
      console.log("end", arguments);

    });
  }
//front
  scrollTo() {
    // @ts-ignore
    scroller.scrollTo('scroll-to-element', {
      duration: 800,
      delay: 0,
      smooth: 'easeInOutQuart'
    })
  }

  render () {
    //var id = null
    var id = this.props.id //---pessoal do login tem que passar id como props
    return (
      <div>
        <nav>
          <div className="container-fluid">
            <div className="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
              <ul className="nav navbar-nav">

                <li><Link activeClass="active" className="GraphGeral" to="GraphGeral" spy={true} smooth={true} duration={500} >Colheita por alimento CSA</Link></li>
                {id !== null && <li><Link activeClass="active" className="GraphEsp_1" to="GraphEsp_2" spy={true} smooth={true} duration={500}>Colheita por alimento Usuário</Link></li>}
                <li><Link activeClass="active" className="GraphEsp_2" to="GraphEsp_1" spy={true} smooth={true} duration={500} >Temporada de Colheita CSA</Link></li>
                {id !== null && <li><Link activeClass="active" className="GraphEsp_3" to="GraphEsp_3" spy={true} smooth={true} duration={500} >Temporada de Colheita Usuário</Link></li>}                

              </ul>
              <div>
            <label htmlFor="filled-in-box">
            Tomate
            <input
                type="checkbox"
                checked={this.state.checked}
                onChange={this.handleCheckClick}
                id="filled-in-box" />
            </label>
        </div>
            </div>
          </div>
        </nav>
        <Element name="GraphGeral" className="element" >
        Colheita por alimento CSA
        <div className="App">
          <Pie alimentos={this.state.alimentos_geral}/>
          <RadioGroup value={this.state.alimentos_geral} onChange={this.handleChange}></RadioGroup>
        </div>

        </Element>

        {id !== null && 
        <Element name="GraphEsp_2" className="element">
        Colheita por alimento Usuário 
        <div className="App">
          <Pie alimentos={this.state.alimentos_user}/>
          <input type="checkbox" checked={this.state.checked} onChange={this.handleCheckClick}  id="filled-in-box"/>
          <label htmlFor="filled-in-box">Tomate</label>
        </div>
        </Element>}

        <Element name="GraphEsp_1" className="element">
        Temporada de Colheita CSA
        <div className="App">
          <Chart kg={this.state.kg_geral}/>
        </div>
        </Element>

        {id !== null &&
        <Element name="GraphEsp_3" className="element">
        Temporada de Colheita Usuário
        <div className="App">
          <Chart kg={this.state.kg_user}/>
        </div>
        </Element>}



      </div>

);


}
};

export default Dash;
提问于
用户回答回答于

试试这个。

        <div>
            <label htmlFor="filled-in-box">
            Tomate
            <input
                type="checkbox"
                checked={this.state.checked}
                onChange={this.handleCheckClick}
                id="filled-in-box" />
            </label>
        </div>

扫码关注云+社区

领取腾讯云代金券