第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

每個(gè)開發(fā)者都必須知道的20個(gè)React實(shí)用技巧

標(biāo)簽:
前端工具 React.JS React

React真的很强大,但不仅仅是掌握基础知识,还要学习一些不为人知的小技巧来让开发更顺畅。下面是我个人最喜欢的20个React小技巧,这些技巧能帮助你提高工作效率,帮助你写出更简洁、更高效的代码。直接上例子吧!

内容省略

1. 条件短路计算用于条件渲染

避免使用冗长的 if 语句来进行条件渲染,而应采用短路计算。

    {isLoading && <Spinner />}

进入/退出全屏。

这只会当 isLoading 为 true 时才渲染 <Spinner /> 组件,使你的 JSX 保持整洁。

……

2. 使用classnames库动态生成类名

classnames库让你可以轻松地根据条件应用类。

npm install classnames

这行命令是用于安装classnames包。

全屏, 退出全屏

    import classNames from 'classnames';

    const buttonClass = classNames({
      'btn': true,
      'btn-primary': isPrimary,
      'btn-secondary': !isPrimary,
    });

    <button className={buttonClass}>点我</button>

切换到全屏模式,退出全屏

此处为空白部分

3. 使用useMemo缓存耗时的计算

当一个计算比较耗时,可以使用缓存来避免 React 不必重复计算,比如 memoize。

const sortedData = useMemo(() => data.sort(), [data]); // 这行代码用于记忆化并排序数据

全屏模式:进入/退出全屏

只会当 data 发生变化时才重新计算 sortedData

……

4. 使用useEffect进行输入防抖

避免因频繁的输入更改而导致的不断重新渲染。通过减少输入变化的频繁触发来避免不断重新渲染。

    const [值, set值] = useState('');
    const [防抖值, set防抖值] = useState('');

    useEffect(() => {
      const 手动器 = setTimeout(() => set防抖值(值), 500);
      return () => clearTimeout(手动器);
    }, [值]);

    <input value={值} onChange={(e) => set值(e.target.value)} />
/* 

* 值:输入框的当前值

* 防抖值:经过防抖处理后的值,用于避免短时间内频繁的输入变化

* useEffect:当值变化时,设置一个500毫秒的延时,以防止快速输入导致不必要的更新

* clearTimeout:清除延时处理
 */

全屏模式 退出全屏

……

5. 自定义 Hooks 用于复用逻辑

将逻辑封装在一个自定义钩子中,以便在不同组件之间重复使用。

    function useFetch(url) {
      const [data, setData] = useState(null);

      useEffect(() => {
        fetch(url).then(res => res.json()).then(setData);
      }, [url]);

      return data;
    }

    const Component = () => {
      const data = useFetch('/api/data');
      return <div>{data ? JSON.stringify(data) : '数据加载中...'}</div>;
    };

进入全屏,退出全屏

此处省略若干字

6. 使用 React.lazy 进行懒加载组件

通过拆分组件来加快加载时间。

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

    function App() {
      return (
        <React.Suspense fallback={<div>加载中...</div>}>
          <LazyComponent />
        </React.Suspense>
      );
    }

点击这里切换到全屏/退出全屏

……

7. 使用useRef访问旧属性和状态

要访问先前的状态值,用 useRef

    const [count, setCount] = useState(0);
    const prevCount = useRef(count);

    useEffect(() => {
      prevCount.current = count;
    }, [count]);

    console.log("Previous: " + prevCount.current + ", 现在: " + count);

全屏 / 退出全屏


8. 使用useCallback传递函数可以避免不必要的组件重新渲染

如果一个函数不需要更新,可以使用 useCallback 进行记忆化。

const increment = useCallback(() => setCount(count + 1), [count]);
// 使用 useCallback 返回一个记忆化的计数递增函数,当 count 更新时重新生成该函数,确保每次调用时 setCount 执行 count + 1 的操作。

全屏切换 退出全屏


9. 解构 props 使代码更清晰

直接在函数参数里解构 props

    const User = ({ name, age }) => (
      <div>{name} {age} 岁了</div>
    );

全屏 退出全屏


10. React.Fragment 用来不使用额外的 div 标签的元素分组

不添加额外的DOM节点来包裹元素。

    <>
      <p>第一段</p>
      <p>第二段</p>
    </>

全屏模式,退出全屏


11. 捕捉JavaScript错误的错误边界处理

捕获子组件中的错误,来防止整个应用的崩溃。

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

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

      render() {
        if (this.state.hasError) return <h1>出了一些问题。</h1>;
        return this.props.children;
      }
    }

进入全屏 退出全屏

GitHub个人主页图片链接GitHub个人主页

Jagroop2001 (Jagroop) · GitHub (GitHub上的用户名)

全栈开发者 | 机器学习工程师 | 开发关系专员,Jagroop2001 正在寻找工作机会

favicon GitHub官网

12. 使用PropTypes来验证属性

通过尽早定义 prop 类型来捕获 bugs。

    导入 PropTypes 从 'prop-types';

    function MyComponent({ name }) {
      // MyComponent 接收一个包含 name 属性的对象
      return <div>{name}</div>;
    }

    MyComponent.propTypes = {
      // 定义 MyComponent 组件的 PropTypes,name 必须是一个字符串
      name: PropTypes.string.isRequired,
    };

全屏 退出全屏


13. 使用useReducer的状态管理器

对于较复杂的状态逻辑,使用useReducer 可能更有效。

    const initialState = { count: 0 }; // 定义初始状态,计数器初始值为0

    function reducer(state, action) { // 定义一个reducer函数,它接收当前状态和动作作为参数
      switch (action.type) { // 根据动作类型决定状态变化
        case 'increment': return { count: state.count + 1 }; // 如果动作是increment,则计数器加1
        case 'decrement': return { count: state.count - 1 }; // 如果动作是decrement,则计数器减1
        default: return state; // 如果动作不是increment或decrement,则保持当前状态不变
      }
    }

    const [state, dispatch] = useReducer(reducer, initialState); // 使用useReducer来管理状态,并返回当前状态和dispatch函数

进入全屏。退出全屏。


14. useLayoutEffect 用于 DOM 操作处理

在 DOM 更新完成后,但在实际绘制前执行效果

    useLayoutEffect(() => {
      // 布局效应是一个React钩子,用于在布局计算之后立即执行副作用
      console.log("布局效应");
    }, []);

全屏开启;全屏关闭;


15. 用 Context 和 useContext 封装状态

创建全局状态,无需 prop 传递。

    const ThemeContext = React.createContext();

    function MyComponent() {
      const theme = useContext(ThemeContext);
      return <div style={{ background: theme }}>你好!大家好!</div>;
    }

点击全屏,按Esc退出


16. 在 JSX 中不要定义内联函数

内联定义函数会导致重渲染的问题。相反,最好把函数定义在外面。

    // 点击按钮时打印“Clicked”到控制台
    const handleClick = () => console.log("Clicked");

    <button onClick={handleClick}>点我</button>

进入全屏模式 退出全屏


17. 在 JSX 中使用可选链进行安全访问属性

优雅地处理 null 或 undefined 的情况。

    <p>{用户?.名字}</p>

全屏退出全屏


18. 使用key:来避免不必要的重新渲染

在渲染列表时,始终使用独一无二的键。

    {items.map(item => (
      <div key={item.id}>{item.名称}</div>
    ))}

全屏显示 退出全屏


19. 通过命名导出组件来更好地控制导入

命名的导出让导入特定的组件更加简单。

    export const 组件A = () => <div>A</div>;
    export const 组件B = () => <div>B</div>;

点击进入全屏模式,点击退出全屏模式

按需根据需要导入:

(最终选择更口语化的表达:“根据需要导入”)
根据需要导入:

    import { ComponentA } from './Components';

切换到全屏,切换出全屏


20. 可复用组件模式:高阶组件(HOCs)(Higher-Order Components)

用HOC包裹组件来添加额外的逻辑。

    function withLogging(WrappedComponent) {
      return function Wrapped(props) {
        console.log('组件已渲染完毕');
        return <WrappedComponent {...props} />;
      };
    }

    const MyComponentWithLogging = withLogging(MyComponent);

您可以切换到全屏 可以退出全屏


掌握这些技巧将让你的React代码更简洁、易读且高效!祝你编程快乐!

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消