You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于React Hooks Context的搜索过滤器:FILTER_X函数正确性验证

你的FILTER_X实现存在问题,具体问题及修正方案如下:

问题1:语法错误,未返回完整状态对象

FILTER_X分支里没有用return返回新的状态对象,直接写filtered: ...是无效语法,正确做法是展开原state并覆盖filtered字段。

问题2:缺少分支终止逻辑

switch语句中FILTER_X分支没有终止逻辑,代码会继续执行到CLEAR_FILTER_X分支,最终filtered被设为null,等于白过滤了。

问题3:正则匹配未做边界判断

如果result.plate不存在(比如为null/undefined),调用match会抛出错误,需要先做存在性检查。


修正后的xReducer代码:

const initialState = {
    data:[],
    filtered: null
};

//@ts-ignore
export const XContext = createContext();

const xReducer = (state:any, action: any) => {
    switch (action.type){
        case 'FETCH_X':
            const { data } = action.payload;
            console.log(action.payload,"HEY");
            return {...state, data};

        case 'FILTER_X':
            // 空关键词直接返回原始状态
            if (!action.payload) {
                return {...state, filtered: null};
            }
            const filteredData = state.data.filter((result:any) => {
                // 先检查plate是否存在,再执行匹配
                if (!result.plate) return false;
                const regex = new RegExp(`${action.payload}`, 'ig');
                return result.plate.match(regex);
            });
            // 返回包含filtered的新状态
            return {...state, filtered: filteredData};

        case "CLEAR_FILTER_X":
            return {
                ...state,
                filtered:null
            }
        default:
            return state;
    }
};

补充说明:

FlatList的数据源可以这样处理:当filtered不为null时用filtered,否则用原始的data,示例代码:

<FlatList
  data={filtered || data}
  // 其他属性...
/>

内容的提问来源于stack exchange,提问作者user17257235

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 20:17:39