面试题答案
一键面试组件结构
假设外层组件为 ParentComponent
,内层组件为 ChildComponent
。ParentComponent
传递多个状态给 ChildComponent
。
import { createSignal } from 'solid-js';
const ParentComponent = () => {
const [state1, setState1] = createSignal(0);
const [state2, setState2] = createSignal(0);
return (
<div>
<button onClick={() => setState1(state1() + 1)}>Increment State1</button>
<button onClick={() => setState2(state2() + 1)}>Increment State2</button>
<ChildComponent state1={state1} state2={state2} />
</div>
);
};
const ChildComponent = ({ state1, state2 }) => {
// 这里进行复杂计算
const result = state1() * state2();
return <div>计算结果: {result}</div>;
};
实现 Memoization
在 Solid.js 中,可以使用 createMemo
来实现 Memoization。
import { createSignal, createMemo } from 'solid-js';
const ParentComponent = () => {
const [state1, setState1] = createSignal(0);
const [state2, setState2] = createSignal(0);
return (
<div>
<button onClick={() => setState1(state1() + 1)}>Increment State1</button>
<button onClick={() => setState2(state2() + 1)}>Increment State2</button>
<ChildComponent state1={state1} state2={state2} />
</div>
);
};
const ChildComponent = ({ state1, state2 }) => {
const memoizedResult = createMemo(() => state1() * state2());
return <div>计算结果: {memoizedResult()}</div>;
};
优化思路
- 原理:
createMemo
会记住上一次计算的结果,只有当依赖的信号(这里是state1
和state2
)发生变化时,才会重新计算。 - 避免不必要计算:在复杂计算场景下,当
state1
或state2
没有变化时,memoizedResult
不会重新计算,从而避免了不必要的性能开销。只有在state1
或state2
变化时,createMemo
才会重新执行回调函数,更新结果。这样确保了内层组件只在必要时重新计算。