javascript - 状态未按预期更新

标签 javascript reactjs state

我使用按类别和文本进行过滤。在每次按文本过滤之前,我想过滤(重置)当前选择的类别。 当文本更改时,在这种情况下类别不会更新。您知道为什么会发生这种情况吗?谢谢。

    handleSearchFilter = (searchText: string) => {
    const { selectedOption } = this.props;
    const { currentlyDisplayed } = this.state;

    this.handleSelectFilter(selectedOption);
    const newDisplayed = filter(currentlyDisplayed, (symbol: any) => symbol.name.cs.includes(searchText.toLowerCase()));
    this.setState({ currentlyDisplayed: newDisplayed });
};

handleSelectFilter = (selectedOption: string) => {
    const { symbols } = this.props;

    if (selectedOption === 'all') {
        this.setState({ currentlyDisplayed: symbols });
    } else {
        const newDisplayed = filter(symbols, (symbol: any) => symbol.category.includes(selectedOption.toLowerCase()));
        this.setState({ currentlyDisplayed: newDisplayed });
    }
};

最佳答案

我认为您可以通过创建返回 newDislayed 的第三个函数来实现您想要的目的,例如:

handleSearchFilter = (searchText: string) => {
    const { selectedOption } = this.props;
    const newDisplayed = this.getNewDisplayed(selectedOption, searchText);
    this.setState({ currentlyDisplayed: newDisplayed });
};

handleSelectFilter = (selectedOption: string) => {
    const newDisplayed = this.getNewDisplayed(selectedOption);
    this.setState({ currentlyDisplayed: newDisplayed });    
};

getNewDisplayed = (selectedOption: string, searchText = '') => {
    const { symbols } = this.props;
    if (selectedOption === 'all') {
        return symbols;
    } else {
        return filter(symbols, (symbol: any) => symbol.category.includes(selectedOption.toLowerCase()) && symbol.name.cs.includes(searchText.toLowerCase()) );
    }
}

关于javascript - 状态未按预期更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52740672/

相关文章:

javascript - 图像按顺序显示,带有动画和延迟(淡入和上滑)

javascript - 手动显示和隐藏 jQuery ui 工具提示

javascript - 如何在 ReactJs 中打印 Fetch Promise 值?

javascript - ESLint : Failed to load config "next/babel" to extend from

html - 导航栏没有使我的链接居中,我不知道如何使用 flexbox 来做到这一点

html - 如何使用源链接 react.js 中的图像

angularjs - 将 UI-Router 状态参数从父级一致传递到子级

javascript - 带计时的 jQuery 鼠标悬停

javascript - 警告 : Can't call setState (or forceUpdate) on an unmounted component in React Native

Flutter RootRestorationScope 不恢复最后一个根