React.memo 性能优化详解

望舒的头像
望舒
标签:
React.memo性能提升渲染优化浅比较React性能优化组件优化

React 是一个高效的前端框架,它的核心之一是虚拟 DOM 和高效的渲染机制。React 在更新组件时,通过比较新旧虚拟 DOM 来减少不必要的 DOM 操作,从而提升性能。但是,对于某些组件的更新,React 的默认渲染机制可能仍然带来性能损耗。为了进一步优化,React 提供了 React.memo,它是一个高阶组件(HOC),用于缓存组件的渲染结果,避免不必要的重新渲染。本文将详细介绍 React.memo 的使用方法及性能优化的原理。

1. 什么是 React.memo

React.memo 是 React 提供的一个用于性能优化的高阶组件(HOC)。它可以包裹一个函数组件,判断组件的 props 是否发生变化,如果 props 没有变化,则避免重新渲染该组件,从而提升应用的性能。

复制
展开
const MyComponent = React.memo(function MyComponent(props) {
  console.log("Component rendered!");
  return <div>{props.name}</div>;
});

在上述代码中,React.memo 包裹了 MyComponent,这意味着只有当 props.name 改变时,组件才会重新渲染。如果 props.name 保持不变,React 会跳过渲染过程,直接复用上一次的渲染结果。

2. 为什么需要 React.memo

React 默认会在父组件重新渲染时,重新渲染其所有子组件。即使某个子组件的 props 没有发生变化,React 也会重新渲染该子组件。这样在一些复杂的组件树中,可能会导致性能问题,特别是在组件数量多、渲染频繁的场景下。

通过使用 React.memo,可以确保只有在组件的 props 发生变化时,才会重新渲染该组件,从而减少不必要的渲染,提高性能。

3. React.memo 的工作原理

React.memo 内部使用了浅比较(shallow comparison)来判断组件的 props 是否发生变化。它对比的是 props 的浅层次内容,如果 props 中的某个对象或数组发生变化,React.memo 会认为组件的 props 已经变化,从而触发重新渲染。

复制
展开
const prevProps = { name: 'Alice' };
const nextProps = { name: 'Bob' };

React.memo(() => { /* some component */ }).prevProps !== nextProps; // true

对于一些较复杂的对象或数组,如果这些 props 在每次渲染时都会发生变化,使用 React.memo 可能无法带来预期的性能提升。在这种情况下,可以手动提供自定义的比较函数来优化判断逻辑。

4. 自定义比较函数

React.memo 接受第二个参数——一个自定义的比较函数。该函数接收两个参数,分别是 prevPropsnextProps,并返回一个布尔值,表示是否需要重新渲染组件。如果返回 true,则 React 会跳过渲染;如果返回 false,则会重新渲染组件。

复制
展开
const MyComponent = React.memo(
  function MyComponent(props) {
    return <div>{props.name}</div>;
  },
  (prevProps, nextProps) => {
    return prevProps.name === nextProps.name;
  }
);

在上面的例子中,React.memo 只会在 props.name 发生变化时才重新渲染组件,如果 name 没有变化,则组件会复用上一次的渲染结果。

5. React.memouseMemo 的区别

  • React.memo: 是一个高阶组件,专门用于包裹函数组件,防止不必要的渲染,基于 props 的变化来决定是否重新渲染。
  • useMemo: 是一个 React Hook,用于缓存计算值。它不会影响组件的渲染,而是通过缓存计算的结果来优化昂贵的计算操作。

虽然 useMemoReact.memo 都可以用于性能优化,但它们的应用场景不同。useMemo 用于缓存计算结果,React.memo 用于缓存组件的渲染结果。

6. React.memo 的最佳实践

  • 避免在每次渲染时都传递新的对象或数组:如果将一个新的对象或数组作为 props 传递给组件,React.memo 会认为 props 发生了变化,导致重新渲染。因此,应该避免在每次渲染时创建新的对象或数组,可以使用 useMemo 来缓存它们。

    复制
    展开
    const MyComponent = React.memo(({ items }) => {
      console.log('MyComponent rendered');
      return <div>{items.join(', ')}</div>;
    });
    
    function ParentComponent() {
      const items = useMemo(() => ['item1', 'item2'], []);
      return <MyComponent items={items} />;
    }
    
  • 避免过度使用React.memo 在小组件或者渲染频率较低的组件上效果不明显,反而可能带来性能开销。只有在组件渲染非常频繁时,React.memo 才能带来显著的性能提升。

  • 合理使用自定义比较函数:在需要时,可以通过自定义比较函数来优化复杂的 props 对象比较,避免每次渲染都进行深层次的比较。

7. 性能优化示例

假设我们有一个组件需要频繁渲染,但是它的 props 数据没有变化,我们可以通过 React.memo 来优化:

复制
展开
const ExpensiveComponent = React.memo(({ data }) => {
  console.log('Rendering ExpensiveComponent');
  return <div>{data}</div>;
});

function ParentComponent() {
  const [count, setCount] = useState(0);
  
  return (
    <div>
      <ExpensiveComponent data="This is a static value" />
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </div>
  );
}

在这个例子中,即使父组件的状态 count 发生变化,ExpensiveComponent 也不会重新渲染,因为它的 props(data)没有变化。

8. 总结

React.memo 是 React 中用于性能优化的一个非常有用的工具,能够缓存组件的渲染结果,减少不必要的渲染。它通过对比 props 的变化来判断是否需要重新渲染组件,适用于渲染频繁、props 变化不频繁的组件。然而,React.memo 并非万能,使用时需要根据实际场景来判断是否适合,避免过度使用带来的性能开销。

作者:https://blog.xn--rpv331d.com/望舒

链接:https://blog.xn--rpv331d.com/望舒/blog/96

转载注意保留文章出处...

‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌‌​‌​​​‌​​‌​​‌​‌‌​‌​‌‌‌‌​‌‌​‌​‌‌​​​​​​​​​​​‌​‌​‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌‌‌‌‌‌‌‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌​‌‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​​‌‌‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌‌‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌‌​‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​​‌​​​​​‌​‌​​​‌‌​​​‌​‌‌​‌​‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​​‌​‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌​‌‌‌​‌‌​‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌​‌‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​​‌‌‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌‌‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌‌​‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​​‌​​​​​‌​‌​​​‌‌​​​‌​‌‌​‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌​‌‌​​​​‌‌‌​​‌‌‌​‌​​‌‌‌‌​‌‌‌​​​​​​​​​​​​​​​​‌​‌​‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌‌‌‌‌‌‌‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌​‌‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​​‌‌‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌‌‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌‌​‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​​‌​​​​​‌​‌​​​‌‌​​​‌​‌‌​‌​‌‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌‌‌‌​‌‌‌​‌‌‌​‌‌‌‌​​‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​​‌​‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌​‌‌‌​‌‌​‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌​‌‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​​‌‌‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌‌‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌‌​‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​​‌​​​​​‌​‌​​​‌‌​​​‌​‌‌​‌​‌‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌‌‌‌​‌‌‌​‌‌‌​‌‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌‌​​​‌​‌‌​‌​​‌‌‌‌‌​​​​​‌‌​‌​​​‌‌‌‌‌‌​‌​​‌​‌‌‌‌​​‌​‌‌‌‌​​​‌​​​​​‌‌‌​‌​​​‌​​‌​​​​​​‌‌‌​​​​​‌‌‌​​​‌‌​‌‌​‌‌​​‌​​​​​​​‌​‌‌‌‌​‌​‌‌‌‌​​​‌‌‌‌​​‌‌‌​‌​‌​​​​‌‌‌‌‌‌​​‌​​‌​‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌
No data