0
votes

TypeError: Impossible de lire la propriété 'Getattendance' de non définie

J'ai ajouté une fonction getattendant qui ne doit être déclenchée que si je clique sur une ligne de table. Si je définis

code> Ça fonctionne bien mais si je le change pour appeler ma fonction à code> OU {this.gettendance}} key = {clé}> code> Son lancement de l'erreur ci-dessus. P>

p>

import React, { Component } from 'react';
import './Attendance.css';
import { Link, withRouter } from 'react-router-dom';

//@ Redux
import { connect } from 'react-redux';
import propTypes from 'prop-types';
import { get_all_employees} from '../../../../store/actions/employeeActions';

export class Attendance extends Component {
    constructor(props){
        super(props);
    }

    componentDidMount(){
        this.props.get_all_employees();
    }

    getAttendance = (e) => {
        e.preventDefault();
        console.log('Hello');
    }

  render() {
    const tbodylist = [];
    let i = 1;
    const { allemployee } = this.props.employee;
    Object.keys(allemployee).forEach(function(key) {
        console.log(key, allemployee[key]);
        let designation = (allemployee[key].designation === 'M')? 'Manager' : (allemployee[key].designation === 'AM') ? 'Assistant Manager' : (allemployee[key].designation === 'LAS') ? 'LAS' : null ;
        let val =    ( <tr onclick={this.getAttendance}   key={key}>
                        <th scope="row" className='text-uppercase vasp_th'>{i}</th>
                        <td  className='text-uppercase vasp_td'>{allemployee[key].employee_id}</td>
                        <td className='text-uppercase vasp_td'>{allemployee[key].name}</td>
                        <td className='text-uppercase vasp_td'>{allemployee[key].doj}</td>
                        <td className='text-uppercase vasp_td'>{designation}</td>
                        <td className='text-uppercase vasp_td'>{allemployee[key].reporting_name}</td>
                    </tr>);
            tbodylist.push(val);
            i++;
    });

    return (
      <div className='container-fluid'>
        <div className='row'>
            <div className='col-lg'>
            {/**First Row */}
                <div className='row vasp_first_row'>
                    <div className='col-sm'>
                        <button className='btn btn-light bg-white px-4'>Filters</button>
                    </div>
                    <div className='col-sm-3'>
                        <Link className='links' to='/add-sales-person'><button className='btn btn_modified text-uppercase'><i className="fa fa-plus" aria-hidden="true"></i>&nbsp;Add Sales People</button></Link>
                    </div>
                </div>
                {/**First Row Ends*/}
            </div>
        </div>
        <div className='row'>
            <div className='col-lg vasp_second_col text-center'>
                {/** Second Row TABLES */}
                <table className="table table-borderless view_table">
                    <thead>
                        <tr>
                        <th scope="col" className='text-uppercase vasp_th'>Sr. No</th>
                        <th scope="col" className='text-uppercase vasp_th'>Employee Id</th>
                        <th scope="col" className='text-uppercase vasp_th'>Name</th>
                        <th scope="col" className='text-uppercase vasp_th'>Date of Joining</th>
                        <th scope="col" className='text-uppercase vasp_th'>Designation</th>
                        <th scope="col" className='text-uppercase vasp_th'>Reporting To</th>
                        </tr>
                    </thead>
                <tbody>
                    {tbodylist}
                </tbody>
                </table>
                {/**Second Row Ends */}
            </div>
        </div>
      </div>
    )
  }
}

const mapStateToProps = (state)=> ({
    employee:state.employee
})

export default connect(mapStateToProps,{get_all_employees})(withRouter(Attendance));


3 Réponses :


0
votes

Si vous souhaitez utiliser la fonction

 constructor(props){
    super(props);
this.getAttendance=this.getAttendance.bind(this);
}


1 commentaires

Ne fonctionne pas. Merci pour des efforts



0
votes

Je pense que le problème est dans votre boucle pour chaque boucle: xxx

déclarant une fonction avec le mot clé ne lie pas le contexte local, vous pouvez essayer de Remplacez-le par:

objet.keys (Allemployee) .Poreseach ((clé) => {


0 commentaires

0
votes

Votre problème est avec la fonction anonyme à l'intérieur de vous xxx

vous utilisez fonction (clé) qui liera ce à la contexte local. Ce n'est pas ce que vous voulez.

Vous pouvez également mettre ce dans une variable avant d'appeler objet.keys (...) xxx

ou vous pouvez utiliser une fonction de flèche graisse xxx


0 commentaires