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

React-Table设置global-Filter默认值后输入框无法输入如何解决

问题原因

你写的useEffect没有指定依赖数组,这会导致每次组件渲染的时候都会执行回调:你在输入框输入内容触发setFilter更新filter状态后,组件重渲染,useEffect立刻又把filter重置为固定字符串projekt,所以看起来就像没法输入内容。

解决方案

给useEffect添加空的依赖数组[],这样只会在组件首次挂载完成后执行一次设置默认值的逻辑,后续渲染不会重复触发,就不会覆盖你输入的内容了。
修改后的完整代码如下:

import React, { useEffect } from "react";

export const GlobalFilter = ({ filter, setFilter }) => {
  // 仅首次挂载时设置默认过滤值
  useEffect(()=>{
    setFilter("projekt");
  }, []) // 此处添加空依赖数组
    
  return (
    <span>
      <input
        id="globalFilterOrderHistory"
        className="input searchHistoryOrder"
        placeholder="Search"
        value={filter || ""}
        onChange={(e) => setFilter(e.target.value)}
      />
      <i className="fa fa-search fa-1_5" />
    </span>
  );
};
注意事项
  • 如果你的默认值来自外部props,需要把对应的props变量加到依赖数组里,比如默认值是props.defaultFilter,就把依赖数组改成[props.defaultFilter],避免出现闭包问题。
  • 如果你使用React 18+的严格模式,开发环境下组件会挂载两次,空依赖的useEffect会执行两次,该情况属于React的开发校验逻辑,不影响生产环境功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:18:04