面试题答案
一键面试-
原理简述
createSignal
:用于创建响应式状态。当信号的值发生变化时,依赖它的部分会重新渲染。createMemo
:用于创建一个 memoized 值。只有当它依赖的响应式数据发生变化时,才会重新计算其值,否则会使用缓存的结果,从而避免不必要的重渲染。
-
关键代码示例
import { createSignal, createMemo } from 'solid-js';
const App = () => {
// 创建响应式信号
const [name, setName] = createSignal('');
const [age, setAge] = createSignal(0);
// 使用createMemo创建一个memoized值
const formData = createMemo(() => ({
name: name(),
age: age()
}));
const handleSubmit = (e) => {
e.preventDefault();
console.log('提交的数据:', formData());
};
return (
<form onSubmit={handleSubmit}>
<label>
姓名:
<input type="text" onChange={(e) => setName(e.target.value)} />
</label>
<label>
年龄:
<input type="number" onChange={(e) => setAge(Number(e.target.value))} />
</label>
<button type="submit">提交</button>
</form>
);
};
export default App;
在上述代码中,formData
是一个通过 createMemo
创建的 memoized 值,只有当 name
或 age
信号发生变化时,formData
才会重新计算。如果在组件的其他地方使用 formData
,即使表单中的其他操作导致了重渲染,但只要 name
和 age
没有变化,formData
就不会重新计算,从而避免了不必要的性能开销。