如何将数组传递给函数

时间:2019-02-14 12:08:32

标签: arrays reactjs function methods

我有一个函数可以将元素保存在onclick数组中。我的意思是,当我单击一个元素时,该元素将发送到将其保存在数组中的函数:

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”中的以下属性:title,id,defaultTag”

我该怎么办?

问候 美国

1 个答案:

答案 0 :(得分:0)

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)}