所以我正在学习并开始使用Solid.js,我想知道我们如何处理solid.js中的ref,就像react中的useRef一样。
我检查文档我尝试这样的事情:
let navigationOuterRef: HTMLDivElement
let navigationRef: HTMLUListElement
const MenuNavbar = (props: {layoutDatas: LayoutNavigation[]}) => {
const [priorityItems, setPriorityItems] = createSignal<LayoutNavigation[]>(props.layoutDatas);
//....
return (
<div ref={navigationOuterRef} class="....">
<ul ref={navigationRef} class="...">
<For each={priorityItems()}>
{(labelName) => (
<li class="flex items-center cursor-pointer">
{labelName.label}
</li>
)}
</For>
</ul>
//...
Run Code Online (Sandbox Code Playgroud)
它有效...但我收到了警告消息,例如
createRoot在or之外创建的计算render永远不会被处理
所以我认为问题是我在组件外部创建了引用,因此如果没有适当的上下文,如果卸载它就无法处理它,但是如果我在组件中移动了引用声明,我在 TS 中会出现此错误
变量“navigationOuterRef”在分配之前使用。
那么我做错了什么以及正确的方法是什么?
我从一周开始学习 Javascript,并尝试对循环进行一些练习,因此我尝试创建一个函数,每次调用它时,我都会将数组中的数字加倍。
我设法用经典的“for”循环来做到这一点,如下所示:
var numbers = [2, 5, 37, 500, 75];
function getDoubled() {
for (var i = 0; i < numbers.length; i++) {
(numbers[i] = numbers[i] * 2);
}
}
Run Code Online (Sandbox Code Playgroud)
因此,每次调用该函数时,数组中的数字都会翻倍getDoubled();,现在我尝试对方法执行相同的forEach操作。
var numbers = [2, 5, 37, 500, 75];
function getDoubled(array) {
array.forEach(function(number) {
(number = number * 2);
})
}
Run Code Online (Sandbox Code Playgroud)
但是当我调用该函数时,我无法更改数组getDoubled(numbers),但是如果我使用 进行测试console.log(number*2),它会在控制台中工作,所以我无法找出错误。