Как вызвать несколько экземпляров одной и той же функции с разными аргументами в onClick React? - PullRequest
0 голосов
/ 07 марта 2019

Я осуществляю сортировку таблицы в Модальном окне. Я написал этот код, но он неверный.

<ExtendedModalBar
  list={this.state.modalList}
  onCancel={this.handleExtendedModalClose}
  onSave={(...args) => this.handleSaveFromModal(...args)}
  selectedItems={this.state.modalItems}
  show={this.state.showExtendedModal}
  type={this.state.modalType}
  //onClick={this.onSort('', )}
  sortColumn={this.onSort('isSecure', this.state.modalList); this.onSort('profile', this.state.modalList)}
/>

Моя функция:

 onSort = (column, dataToSort) => (event) => {
    const direction = this.state.sort.column ? (this.state.sort.direction === 'asc' ? 'desc' : 'asc') : 'desc';

    dataToSort.sort((a, b) => {
      if ( typeof(a[column]) === 'string' && typeof(b[column]) === 'string' ) {
        const nameA = a[column].toUpperCase(); // ignore upper and lowercase
        const nameB = b[column].toUpperCase(); // ignore upper and lowercase

        if (nameA < nameB ) {
          return -1;
        }
        if (nameA > nameB) {
          return 1;
        }
        // names must be equal
        return 0;
      }

      if( typeof(a[column]) === 'number' && typeof(b[column]) === 'number'){
        return a[column] - b[column];
      }

      if(typeof(a[column]) === 'boolean' && typeof(b[column]) === 'boolean'){
        const firstBool = +(a[column]);
        const secondBool = +(b[column]);
        return firstBool - secondBool;
      }

    }
    );

    if (direction === 'desc') {
      dataToSort.reverse();
    }

    this.setState({
      sort: {
        column,
        direction,
      }
    });
  };

Моя функция сортировки принимает два аргумента: columnName и data. если я вызываю функцию в onClick только один раз, она сортирует только один столбец. как вызвать функцию несколько раз и передать разные аргументы, т.е. разные имена столбцов?

1 Ответ

0 голосов
/ 07 марта 2019

Возможно, проблема связана со следующим: атрибут onClick ожидает только одну функцию . Я бы попробовал что-то вроде этого:

onClick={(event) => 
    this.onSort('isSecure', this.state.modalList)(event); 
    this.onSort('profile', this.state.modalList)(event);
}

или какой-нибудь более элегантный, но эквивалентный код. Надеюсь, это поможет - Карлос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...