From f30b0f096d3947aadad032535b45325b9ee3badb Mon Sep 17 00:00:00 2001 From: * <*> Date: Mon, 15 Jan 2024 14:26:44 +0800 Subject: [PATCH] Match-id-4965acb028e08ee099a54f505a8fc8ce54088021 --- .../no-vnode/no-vnode-base.test.js | 558 ++++++++++++++++++ .../ReactivityTest/reactive-mix-use.test.js | 131 +++- .../reactively/reactively.test.js | 90 +++ .../src/no-vnode/components/For.tsx | 125 ++++ .../src/no-vnode/components/Show.tsx | 25 + packages/inula-reactive/src/no-vnode/core.ts | 91 +++ packages/inula-reactive/src/no-vnode/dom.ts | 295 +++++++++ packages/inula-reactive/src/no-vnode/event.ts | 85 +++ .../inula-reactive/src/reactive/RContext.ts | 11 +- .../src/reactive/RContextCreator.ts | 49 ++ packages/inula-reactive/src/reactive/RNode.ts | 23 +- packages/inula-reactive/src/reactive/Utils.ts | 3 +- packages/inula-reactive/src/reactive/types.ts | 2 +- .../inula-reactive/src/reactively/RNode.ts | 335 +++++++++++ .../src/reactively/RNodeAccessor.ts | 270 +++++++++ .../src/reactively/RNodeCreator.ts | 73 +++ .../src/reactively/Reactively.ts | 24 + .../inula-reactive/src/reactively/Utils.ts | 25 + .../src/reactively/proxy/RProxyHandler.ts | 147 +++++ packages/inula-reactive/src/renderer/Types.ts | 4 +- .../src/renderer/diff/nodeDiffComparator.ts | 2 +- .../src/renderer/hooks/UseWatch.ts | 2 +- .../src/renderer/submit/LifeCycleHandler.ts | 4 +- packages/inula-reactive/src/temp.js | 8 - 24 files changed, 2358 insertions(+), 24 deletions(-) create mode 100644 packages/inula-reactive/scripts/__tests__/ReactivityTest/no-vnode/no-vnode-base.test.js create mode 100644 packages/inula-reactive/scripts/__tests__/ReactivityTest/reactively/reactively.test.js create mode 100644 packages/inula-reactive/src/no-vnode/components/For.tsx create mode 100644 packages/inula-reactive/src/no-vnode/components/Show.tsx create mode 100644 packages/inula-reactive/src/no-vnode/core.ts create mode 100644 packages/inula-reactive/src/no-vnode/dom.ts create mode 100644 packages/inula-reactive/src/no-vnode/event.ts create mode 100644 packages/inula-reactive/src/reactively/RNode.ts create mode 100644 packages/inula-reactive/src/reactively/RNodeAccessor.ts create mode 100644 packages/inula-reactive/src/reactively/RNodeCreator.ts create mode 100644 packages/inula-reactive/src/reactively/Reactively.ts create mode 100644 packages/inula-reactive/src/reactively/Utils.ts create mode 100644 packages/inula-reactive/src/reactively/proxy/RProxyHandler.ts delete mode 100644 packages/inula-reactive/src/temp.js diff --git a/packages/inula-reactive/scripts/__tests__/ReactivityTest/no-vnode/no-vnode-base.test.js b/packages/inula-reactive/scripts/__tests__/ReactivityTest/no-vnode/no-vnode-base.test.js new file mode 100644 index 00000000..947eff0f --- /dev/null +++ b/packages/inula-reactive/scripts/__tests__/ReactivityTest/no-vnode/no-vnode-base.test.js @@ -0,0 +1,558 @@ +import Inula, { computed, createRef, reactive, watchReactive } from '../../../../src/index'; +import { template as _$template, insert as _$insert, setAttribute as _$setAttribute } from '../../../../src/no-vnode/dom'; +import { createComponent as _$createComponent, render } from '../../../../src/no-vnode/core'; +import { delegateEvents as _$delegateEvents, addEventListener as _$addEventListener } from '../../../../src/no-vnode/event'; + +import { Show } from '../../../../src/no-vnode/components/Show'; +import { For } from '../../../../src/no-vnode/components/For'; + +describe('测试 no-vnode', () => { + it('简单的使用signal', () => { + /** + * 源码: + * const CountingComponent = () => { + * const [count, setCount] = useSignal(0); + * + * return
Count value is {count()}.
; + * }; + * + * render(() => , container); + */ + + let g_count; + + // 编译后: + const _tmpl$ = /*#__PURE__*/ _$template(`
Count value is .`); + const CountingComponent = () => { + const count = reactive(0); + g_count = count; + + return (() => { + const _el$ = _tmpl$(), + _el$2 = _el$.firstChild, + _el$4 = _el$2.nextSibling, + _el$3 = _el$4.nextSibling; + _$insert(_el$, count, _el$4); + return _el$; + })(); + }; + render(() => _$createComponent(CountingComponent, {}), container); + + _$delegateEvents(['click']); + + expect(container.querySelector('#count').innerHTML).toEqual('Count value is 0.'); + + g_count.set(c => c + 1); + + expect(container.querySelector('#count').innerHTML).toEqual('Count value is 1.'); + }); + + it('return数组,click事件', () => { + /** + * 源码: + * const CountingComponent = () => { + * const [count, setCount] = createSignal(0); + * const add = () => { + * setCount((c) => c + 1); + * } + * return <> + *
Count value is {count()}.
+ *
+ * ; + * }; + */ + + // 编译后: + const _tmpl$ = /*#__PURE__*/ _$template(`
Count value is .`), + _tmpl$2 = /*#__PURE__*/ _$template(`
+ *
; + * }; + * + * render(() => , document.getElementById("app")); + */ + + // 编译后: + const _tmpl$ = /*#__PURE__*/ _$template(`
Count value is .`), + _tmpl$2 = /*#__PURE__*/ _$template(`
+ *
; + * }; + * + * render(() => , document.getElementById("app")); + */ + + // 编译后: + const _tmpl$ = /*#__PURE__*/ _$template(`
Count value is .`), + _tmpl$2 = /*#__PURE__*/ _$template(`
+ *
+ *
; + * }; + * + * render(() => , document.getElementById("app")); + */ + + // 编译后: + const _tmpl$ = /*#__PURE__*/_$template(`
Count value is .`), + _tmpl$2 = /*#__PURE__*/_$template(`
+ *
+ * ); + * + * const Main = () => { + * const [state, setState] = createStore({data: [{id: 1, label: '111', selected: false}, {id: 2, label: '222', selected: false}], num: 2}); + * + * function run() { + * setState('data', buildData(5)); + * } + * + * return ( + *
+ *
+ *
+ *

Horizon-reactive-novnode

+ *
+ *
+ *
+ *
+ *
+ *
+ * + * + *
+ *
+ * ); + * }; + * + * render(() =>
, document.getElementById("app")); + */ + + // 编译后: + const _tmpl$ = /*#__PURE__*/_$template(``), + _tmpl$2 = /*#__PURE__*/_$template(`