首页 > web前端 > js教程 > 高级反应技术每个高级开发人员都应掌握

高级反应技术每个高级开发人员都应掌握

Barbara Streisand
发布: 2025-01-28 14:33:10
原创
328 人浏览过

Advanced React Techniques Every Senior Developer Should Master

> React是用于制作用户界面(尤其是单页应用程序)的领先JavaScript库,要求掌握高级技术来构建高效,可扩展和可维护的项目。 本文探讨了高级开发人员的20个基本高级React概念,并用与您相关的打字稿示例进行了说明。

  1. 高阶组件(HOCS):>
<code class="language-typescript">import React from 'react';

const withLogger = (WrappedComponent: React.ComponentType) => {
  return class extends React.Component {
    componentDidMount() {
      console.log(`Component ${WrappedComponent.name} mounted`);
    }
    render() {
      return <WrappedComponent {...this.props} />;
    }
  };
};

const MyComponent: React.FC = () => <div>Hello World</div>;
const MyComponentWithLogger = withLogger(MyComponent);</code>
登录后复制
登录后复制
    渲染props:
  1. >使用一个值为函数的prop之间的组件之间共享代码。>
>
<code class="language-typescript">import React from 'react';

interface DataFetcherProps {
  render: (data: any) => JSX.Element;
}

const DataFetcher: React.FC<DataFetcherProps> = ({ render }) => {
  const data = { name: 'John Doe' };
  return render(data);
};

const MyComponent: React.FC = () => (
  <DataFetcher render={(data) => <div>{data.name}</div>} />
);</code>
登录后复制
登录后复制
上下文api:
    促进跨组件的数据共享,消除了道具钻探。
<code class="language-typescript">import React, { createContext, useContext } from 'react';

const MyContext = createContext<string | null>(null);

const MyProvider: React.FC = ({ children }) => {
  const value = 'Hello from Context';
  return <MyContext.Provider value={value}>{children}</MyContext.Provider>;
};

const MyComponent: React.FC = () => {
  const value = useContext(MyContext);
  return <div>{value}</div>;
};</code>
登录后复制
登录后复制
自定义钩子:
    封装并重复使用状态逻辑。
错误边界:
<code class="language-typescript">import { useState, useEffect } from 'react';

const useFetch = (url: string) => {
  const [data, setData] = useState<any | null>(null);
  useEffect(() => {
    fetch(url)
      .then((response) => response.json())
      .then((data) => setData(data));
  }, [url]);
  return data;
};

const MyComponent: React.FC = () => {
  const data = useFetch('https://api.example.com/data');
  return <div>{data ? data.name : 'Loading...'}</div>;
};</code>
登录后复制
捕获并处理组件树中的JavaScript错误。>
  1. 代码拆分:
>通过将代码分成较小的块来提高初始加载时间。 (webpack,lollup等)
<code class="language-typescript">import React from 'react';

class ErrorBoundary extends React.Component {
  state = { hasError: false };

  static getDerivedStateFromError(error: any) {
    return { hasError: true };
  }

  componentDidCatch(error: any, errorInfo: any) {
    console.error(error, errorInfo);
  }

  render() {
    if (this.state.hasError) {
      return <h1>Something went wrong.</h1>;
    }
    return this.props.children;
  }
}

const MyComponent: React.FC = () => {
  throw new Error('Test error');
  return <div>Hello World</div>;
};

const App: React.FC = () => (
  <ErrorBoundary><MyComponent /></ErrorBoundary>
);</code>
登录后复制
  1. >回忆(usememo):
通过缓存昂贵的计算来优化性能。
<code class="language-typescript">import React, { lazy, Suspense } from 'react';

const LazyComponent = lazy(() => import('./LazyComponent'));

const MyComponent: React.FC = () => (
  <Suspense fallback={<div>Loading...</div>}>
    <LazyComponent />
  </Suspense>
);</code>
登录后复制
  1. 门户:
>将孩子渲染到dom的另一部分。
<code class="language-typescript">import React, { useMemo } from 'react';

const MyComponent: React.FC = ({ items }) => {
  const sortedItems = useMemo(() => items.sort(), [items]);
  return <div>{sortedItems.join(', ')}</div>;
};</code>
登录后复制
  1. 片段:
分组儿童而不添加额外的DOM节点。
<code class="language-typescript">import React from 'react';
import ReactDOM from 'react-dom';

const MyPortal: React.FC = () => {
  return ReactDOM.createPortal(
    <div>This is rendered in a portal</div>,
    document.getElementById('portal-root')!
  );
};</code>
登录后复制
  1. refs和dom:
  2. 访问dom节点或react元素。
<code class="language-typescript">import React from 'react';

const MyComponent: React.FC = () => (
  <React.Fragment>
    <div>Item 1</div>
    <div>Item 2</div>
  </React.Fragment>
);</code>
登录后复制
  1. 转发refs:
  2. >通过与孩子的组成部分的通过参考。
<code class="language-typescript">import React, { useRef, useEffect } from 'react';

const MyComponent: React.FC = () => {
  const inputRef = useRef<HTMLInputElement>(null);

  useEffect(() => {
    inputRef.current?.focus();
  }, []);

  return <input ref={inputRef} />;
};</code>
登录后复制
  1. 受控和不受控制的组件:
  2. >在外部或内部管理组件状态。
>
<code class="language-typescript">import React, { forwardRef, useRef } from 'react';

const MyInput = forwardRef<HTMLInputElement>((props, ref) => (
  <input {...props} ref={ref} />
));

const MyComponent: React.FC = () => {
  const inputRef = useRef<HTMLInputElement>(null);
  return <MyInput ref={inputRef} />;
};</code>
登录后复制
  1. 性能优化(react.memo,usememo,usecallback):
防止不必要的重新租赁。
<code class="language-typescript">import React, { useState, useRef } from 'react';

const ControlledComponent: React.FC = () => {
  const [value, setValue] = useState('');
  return <input type="text" value={value} onChange={(e) => setValue(e.target.value)} />;
};

const UncontrolledComponent: React.FC = () => {
  const inputRef = useRef<HTMLInputElement>(null);
  return <input type="text" ref={inputRef} />;
};</code>
登录后复制
  1. 服务器端渲染(SSR):在服务器上渲染组件以改进SEO和性能。 (需要诸如Next.js或Remix之类的服务器端框架。)
<code class="language-typescript">import React, { useCallback, memo } from 'react';

const MyComponent: React.FC<{ onClick: () => void }> = memo(({ onClick }) => {
  console.log('Rendering MyComponent');
  return <button onClick={onClick}>Click me</button>;
});

const ParentComponent: React.FC = () => {
  const handleClick = useCallback(() => {
    console.log('Button clicked');
  }, []);

  return <MyComponent onClick={handleClick} />;
};</code>
登录后复制
  1. >

    >静态站点生成(SSG):构建时间的预渲染页面。 (next.js,gatsby等)

  2. >

    增量静态再生(ISR):构建时间后更新静态内容。 (next.js)

  3. >并发模式:

    提高响应能力并优雅地处理中断。

<code class="language-typescript">import React from 'react';

const withLogger = (WrappedComponent: React.ComponentType) => {
  return class extends React.Component {
    componentDidMount() {
      console.log(`Component ${WrappedComponent.name} mounted`);
    }
    render() {
      return <WrappedComponent {...this.props} />;
    }
  };
};

const MyComponent: React.FC = () => <div>Hello World</div>;
const MyComponentWithLogger = withLogger(MyComponent);</code>
登录后复制
登录后复制
    用于数据获取的
  1. > 悬念:在数据获取过程中声明处理加载状态。
<code class="language-typescript">import React from 'react';

interface DataFetcherProps {
  render: (data: any) => JSX.Element;
}

const DataFetcher: React.FC<DataFetcherProps> = ({ render }) => {
  const data = { name: 'John Doe' };
  return render(data);
};

const MyComponent: React.FC = () => (
  <DataFetcher render={(data) => <div>{data.name}</div>} />
);</code>
登录后复制
登录后复制
    >
  1. REACT查询:简化数据获取,缓存和同步。
<code class="language-typescript">import React, { createContext, useContext } from 'react';

const MyContext = createContext<string | null>(null);

const MyProvider: React.FC = ({ children }) => {
  const value = 'Hello from Context';
  return <MyContext.Provider value={value}>{children}</MyContext.Provider>;
};

const MyComponent: React.FC = () => {
  const value = useContext(MyContext);
  return <div>{value}</div>;
};</code>
登录后复制
登录后复制
>
    > React服务器组件:
  1. 结合客户端交互与服务器端渲染好处。 (需要一个支持RSC的框架,例如Next.js 13。 >
  2. 结论:
掌握这些高级技术,使高级React开发人员能够创建高性能,可维护和健壮的应用程序。 通过将这些策略集成到您的工作流程中,您将有能力处理复杂的项目并提供出色的用户体验。

以上是高级反应技术每个高级开发人员都应掌握的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板