首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何简单地改变信号中的数组?

我如何简单地改变信号中的数组?
EN

Stack Overflow用户
提问于 2022-04-22 02:08:38
回答 1查看 834关注 0票数 4

这是一个有用的例子,有一个问题。我想在一个信号中拼接一个现有的数组,并返回它以查看它的更新。但不起作用。我如何简单地改变信号中的数组?我不想创建新的数组,只是简单的拼接。在文档中没有变异数组的例子。

代码语言:javascript
复制
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'))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-22 03:40:06

实心教程强烈建议不变性

Solid强烈建议使用浅层不变模式来更新状态。通过分离读和写,我们可以更好地控制系统的反应性,而不会在通过组件层时失去对代理更改的跟踪。

要完成您的目标,一种不变的方法可能如下所示:

代码语言:javascript
复制
setA(a => ['hello', ...a])

但是,如果确定必须对信号进行变异,则可以指定如何确定信号是否已在“选项”对象中更新。默认情况下,使用===运算符通过引用相等比较信号更改。在调用setter之后,可以通过将equals设置为false来告诉实体始终重新运行受抚养人。

代码语言:javascript
复制
let [a, setA] = createSignal([], { equals: false });

或者您可以传递一个函数,该函数接受信号的previousnext值,并返回一个boolean

代码语言:javascript
复制
let [a, setA] = createSignal([], { equals: (prev, next) => {
  if (/* dependents should run */) {
    return false;
  }
  // dependents shouldn't run
  return true;
} });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71962713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档