【SolidJs】仅次于原生JS的超级性能!SolidJs框架教程【中】

简介: Children在SolidJs中,如果在组件中写一些children,并非仅仅作为展示,而需要在子组件中处理children时,需要用到children函数。

Props

Children

在SolidJs中,如果在组件中写一些children,并非仅仅作为展示,而需要在子组件中处理children时,需要用到children函数。

举个🌰

main.tsx

import { render } from "solid-js/web";
import { createSignal, For } from "solid-js";
import ColoredList from "./colored-list";
function App() {
  const [color, setColor] = createSignal("red");
  const [persons] = createSignal(["Alice", "Bob", "Jack"])
  return <>
    <ColoredList color={color()}>
      <For each={persons()}>{item => <div style={{color: color()}}>{item}</div>}</For>
    </ColoredList>
    <button onClick={() => setColor("green")}>Set Color</button>
  </>;
}
render(() => <App />, document.getElementById('app'));
复制代码

color-list.tsx

import { createEffect, children } from 'solid-js'
export default function ColorList(props) {
    const c = children(() => props.children) // 处理children
    createEffect(() => c().forEach(item => item.style.color = props.color)) // 监听props.color并修改children的颜色
    return <>{c()}</>
}
复制代码

Store

创建Store

import { render } from "solid-js/web";
import { createStore } from "solid-js/store";
const App = () => {
  const [store, setStore] = createStore({ username: "Alice" });
  console.log("store -----> ", store); // "store -----> " {"username": "Alice"}
  const toggleUsername = (username) => {
    console.log(username);
    setStore("username", (name) => {
      console.log("store.name ----->", name); // "store.name ----->" "Alice"
      return username;
    });
  };
  return (
    <>
      <div>{store.username}</div>
      <button onClick={[toggleUsername, "bob"]}>setStore username</button>
    </>
  );
};
render(App, document.getElementById("app"));
复制代码

修改Store

修改Store有一个修饰符produce,需要吧上面的🌰改成这样修改:

const toggleUsername = (username) => {
    setStore(
        'username',
        produce((name) => username)
    )
}
复制代码

produce的作用是小范围修改值

它可以让你在 setStore 调用中改变 Store 对象的可写代理版本

Context

Context API 用来传递数据,不依赖Props,多用于组件间的数据共享,食用方法一般为,创建一个Context对象,该对象包含一个用于注入数据的Provider组件,举个计数器的🌰:

main.tsx

import { render } from 'solid-js/web'
import Nested from './nested'
import { CounterProvider } from './counter'
function App() {
    return <>
        <h1>Welcome</h1>
        <Nested />
    </>
}
render(() => {
    <CounterProvider count={1}> <App /> </CounterProvider>,
    document.getElementById('app')
})
复制代码

nested.tsx

import { useCounter } from './counter.tsx'
const [count, {invrement,decrement}] = useCounter()
export default function Nested() {
    return (
        <>
            <div>0</div>
            <button>+</button>
            <button>-</button>
        </>
    )
}
复制代码

counter.tsx

import { createSignal, createContext, useContext } from 'solid-js'
const CounterContext = createContext()
export function CounterProvider(props) {
    const [count, setCount] = createSignal(props.count || 0),
          store = [
              count,
              {
                  invrement() { setCount(c => c + 1) },
                  decrement() { setCount(c => c - 1) }
              },
          ]
    return (
        <CounterContext.Provider value={store}>{props.children}</CounterContext.Provider>
    )
}
export function useCounter() { return useCountext(CounterContext)}
复制代码

懒加载组件

举个🌰

main.tsx

import { render } from "solid-js/web";
import { lazy } from "solid-js";
const Greeting = lazy(() => import("./greeting"))
function App() {
  return (
    <>
      <h1>Welcome</h1>
      <Greeting name="Jake" />
    </>
  );
}
render(() => <App />, document.getElementById("app"));


目录
相关文章
|
2月前
|
监控 JavaScript 算法
如何使用内存监控工具来定位和解决Node.js应用中的性能问题?
总之,利用内存监控工具结合代码分析和业务理解,能够逐步定位和解决 Node.js 应用中的性能问题,提高应用的运行效率和稳定性。需要耐心和细致地进行排查和优化,不断提升应用的性能表现。
195 77
|
14天前
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
139 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
2月前
|
存储 缓存 JavaScript
如何优化Node.js应用的内存使用以提高性能?
通过以上多种方法的综合运用,可以有效地优化 Node.js 应用的内存使用,提高性能,提升用户体验。同时,不断关注内存管理的最新技术和最佳实践,持续改进应用的性能表现。
140 62
|
2月前
|
JavaScript 前端开发
如何使用时间切片来优化JavaScript动画的性能?
如何使用时间切片来优化JavaScript动画的性能?
|
2月前
|
存储 缓存 监控
如何使用内存监控工具来优化 Node.js 应用的性能
需要注意的是,不同的内存监控工具可能具有不同的功能和特点,在使用时需要根据具体工具的要求和操作指南进行正确使用和分析。
79 31
|
2月前
|
Web App开发 JavaScript 前端开发
2024年5月node.js安装(winmac系统)保姆级教程
本篇博客为2024年5月版Node.js安装教程,适用于Windows和Mac系统。作者是一名熟悉JavaScript与Vue的大一学生,分享了Node.js的基本介绍、下载链接及简单安装步骤。安装完成后,通过终端命令`node -v`验证版本即可确认安装成功。欢迎关注作者,获取更多技术文章。
38 2
2024年5月node.js安装(winmac系统)保姆级教程
|
1月前
|
JSON 缓存 负载均衡
Node.js 的性能
Node.js 的性能
58 12
|
2月前
|
缓存 监控 JavaScript
Vue.js 框架下的性能优化策略与实践
Vue.js 框架下的性能优化策略与实践
|
2月前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
49 2
|
2月前
|
缓存 负载均衡 JavaScript
构建高效后端服务:Node.js与Express框架实践
在数字化时代的浪潮中,后端服务的重要性不言而喻。本文将通过深入浅出的方式介绍如何利用Node.js及其强大的Express框架来搭建一个高效的后端服务。我们将从零开始,逐步深入,不仅涉及基础的代码编写,更会探讨如何优化性能和处理高并发场景。无论你是后端新手还是希望提高现有技能的开发者,这篇文章都将为你提供宝贵的知识和启示。