MST

星途 面试题库

面试题:Solid.js createMemo 在复杂场景下的缓存应用

假设你正在开发一个包含多层嵌套数据结构的应用,其中部分数据频繁变化,而其他部分相对稳定。如何利用 Solid.js 的 createMemo 来优化性能,避免不必要的重新计算?请结合代码示例说明。
41.6万 热度难度
前端开发Solid.js

知识考点

AI 面试

面试题答案

一键面试
  1. 理解createMemo的作用
    • createMemo在Solid.js中用于创建一个记忆化的值。它会记住上一次计算的结果,只有当它依赖的响应式数据发生变化时,才会重新计算。
  2. 代码示例
    • 假设我们有一个多层嵌套的数据结构,比如一个包含用户信息和订单列表的对象。用户信息变化不频繁,而订单列表可能频繁变化。
    import { createSignal, createMemo } from'solid-js';
    
    const App = () => {
      // 用户信息,相对稳定
      const [user, setUser] = createSignal({ name: 'John', age: 30 });
      // 订单列表,频繁变化
      const [orders, setOrders] = createSignal([]);
    
      // 使用createMemo来优化对相对稳定数据的计算
      const memoizedUserInfo = createMemo(() => {
        return `User: ${user().name}, Age: ${user().age}`;
      });
    
      // 这里可以模拟订单变化的操作
      const addOrder = () => {
        setOrders([...orders(), { id: Date.now(), amount: 100 }]);
      };
    
      return (
        <div>
          <p>{memoizedUserInfo()}</p>
          <button onClick={addOrder}>Add Order</button>
          <ul>
            {orders().map(order => (
              <li key={order.id}>Order ID: {order.id}, Amount: {order.amount}</li>
            ))}
          </ul>
        </div>
      );
    };
    
    export default App;
    
    • 在这个示例中,memoizedUserInfo使用createMemo创建。即使orders频繁变化,只要user不变,memoizedUserInfo就不会重新计算,从而优化了性能。只有当user通过setUser改变时,memoizedUserInfo才会重新计算。