这是一个有用的例子,有一个问题。我想在一个信号中拼接一个现有的数组,并返回它以查看它的更新。但不起作用。我如何简单地改变信号中的数组?我不想创建新的数组,只是简单的拼接。在文档中没有变异数组的例子。
import { render } from 'solid-js/web';
import { createSignal, createEffect } from 'solid-js'
function HelloWorld() {
let [a, setA] = createSignal([])
setTimeout(() =>
setA(a => {
a.splice(0, 0, 'hello')
// this logs as requested if I uncomment this
//return ['hello']
return a
}))
createEffect(() => {
console.log(a())
})
return <div>Hello World!</div>;
}
render(() => <HelloWorld />, document.getElementById('app'))发布于 2022-04-22 03:40:06
实心教程强烈建议不变性
Solid强烈建议使用浅层不变模式来更新状态。通过分离读和写,我们可以更好地控制系统的反应性,而不会在通过组件层时失去对代理更改的跟踪。
要完成您的目标,一种不变的方法可能如下所示:
setA(a => ['hello', ...a])但是,如果确定必须对信号进行变异,则可以指定如何确定信号是否已在“选项”对象中更新。默认情况下,使用===运算符通过引用相等比较信号更改。在调用setter之后,可以通过将equals设置为false来告诉实体始终重新运行受抚养人。
let [a, setA] = createSignal([], { equals: false });或者您可以传递一个函数,该函数接受信号的previous和next值,并返回一个boolean
let [a, setA] = createSignal([], { equals: (prev, next) => {
if (/* dependents should run */) {
return false;
}
// dependents shouldn't run
return true;
} });https://stackoverflow.com/questions/71962713
复制相似问题