Как я могу передать массив в функцию - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть функция, которая сохраняет элементы в массиве по клику.Я имею в виду, когда я нажимаю на элемент, этот элемент отправляет функции, которая сохраняет его в массиве:

private renderTags(tag: Tags, index: number) {
    console.log('SELECTED TAG: ' + this.state.selectedTags.length);
    return <div>
        <div  onClick={(e) => { e.stopPropagation(); this.collectTags (tag); }}>
            <p 
                className={styles.tag}
                ># {tag.title} <i className="ms-Icon ms-Icon--CirclePlus"></i></p>
        </div>
    </div>

}

Я вижу, что на самом деле элементы находятся в массиве selectedTags.Это функция collectTags:

private collectTags(tag: Tags): any {
    this.setState({ savingSettings: true, tagActive: true });

    let selectedTags: Tags[] = this.state.selectedTags;

    selectedTags.push(tag);
    this.setState({
        selectedTags: selectedTags
    });


    return selectedTags;

}

Нет, у меня есть другая функция, которая обновляет состояние массива, содержащего выбранные элементы.Проблема в том, что я не могу найти способ передать массив в эту функцию:

private saveSettings(newTag: Tags): void {
    this.setState({ savingSettings: true, tagActive: true });

    let tags: Tags[] = this.state.items;

    // Add the new tag to the tags array and update the state
    tags.push(newTag);

    this.setState({
        items: tags,
        activeTile: -1
    });

    var cacheManager = new CacheManager();
    cacheManager.set(this.cacheKey, tags);

    this.props.provider.saveSettingsData(tags).then(() => {
        this.setState({
            savingSettings: false
        });
    });
}

Чтобы сохранить массив, я пытаюсь использовать событие onclick, которое выглядит так:

onClick={this.saveSettings(this.state.selectedTags)}

В VS я получаю эту ошибку:

"Аргумент типа 'Tags []' не может быть назначен параметру типа 'Tags'. Типу 'Tags []' не хватает следующих свойств извведите 'Tags': title, id, defaultTag "

Что я могу сделать?

С уважением, Американо

1 Ответ

0 голосов
/ 14 февраля 2019
private saveSettings(newTag: Tags): void {

    this.setState((prevState )=>({
        savingSettings: true, 
        tagActive: true,
        items: [...prevState.items,newTag],
        activeTile: -1
    }));

    var cacheManager = new CacheManager();
    cacheManager.set(this.cacheKey, tags);

    this.props.provider.saveSettingsData(tags).then(() => {
        this.setState({
            savingSettings: false
        });
    });
}

и вы можете вызвать щелчок через функцию ES6

onClick={()=>{this.saveSettings(this.state.selectedTags)}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...