From e3895bda8bafa0a5bd3497d014676e3f2b7a3dfd Mon Sep 17 00:00:00 2001
From: * <8>
Date: Mon, 27 Jun 2022 14:18:16 +0800
Subject: [PATCH] Match-id-efc4c1e8f6dd5638e77058d13d15814e4d831207
---
libs/horizon/src/event/EventBinding.ts | 5 +-
libs/horizon/src/event/HorizonEventMain.ts | 1 -
.../ComponentTest/HookTest/UseEffect.test.js | 8 ++-
scripts/__tests__/DomTest/DomInput.test.js | 58 -------------------
scripts/__tests__/DomTest/DomSelect.test.js | 33 +----------
scripts/__tests__/DomTest/DomTextarea.test.js | 22 +------
6 files changed, 11 insertions(+), 116 deletions(-)
diff --git a/libs/horizon/src/event/EventBinding.ts b/libs/horizon/src/event/EventBinding.ts
index 9398d648..5a38e45b 100644
--- a/libs/horizon/src/event/EventBinding.ts
+++ b/libs/horizon/src/event/EventBinding.ts
@@ -70,9 +70,10 @@ export function lazyDelegateOnRoot(currentRoot: VNode, eventName: string) {
const nativeEvents = allDelegatedHorizonEvents.get(eventName);
nativeEvents.forEach(nativeEvent => {
- if (!currentRoot.delegatedNativeEvents.has(nativeEvent)) {
+ const nativeFullName = isCapture ? nativeEvent + 'capture' : nativeEvent;
+ if (!currentRoot.delegatedNativeEvents.has(nativeFullName)) {
listenToNativeEvent(nativeEvent, currentRoot.realNode, isCapture);
- currentRoot.delegatedNativeEvents.add(nativeEvent);
+ currentRoot.delegatedNativeEvents.add(nativeFullName);
}
});
}
diff --git a/libs/horizon/src/event/HorizonEventMain.ts b/libs/horizon/src/event/HorizonEventMain.ts
index aff68d17..96fe5167 100644
--- a/libs/horizon/src/event/HorizonEventMain.ts
+++ b/libs/horizon/src/event/HorizonEventMain.ts
@@ -206,7 +206,6 @@ export function handleEventMain(
} finally {
isInEventsExecution = false;
if (shouldDispatchUpdate) {
- runDiscreteUpdates();
// 若是Radio,同步同组其他Radio的Handler Value
syncRadiosHandler(nativeEvent.target as Element);
}
diff --git a/scripts/__tests__/ComponentTest/HookTest/UseEffect.test.js b/scripts/__tests__/ComponentTest/HookTest/UseEffect.test.js
index 129c2ec3..8f4876f5 100644
--- a/scripts/__tests__/ComponentTest/HookTest/UseEffect.test.js
+++ b/scripts/__tests__/ComponentTest/HookTest/UseEffect.test.js
@@ -16,7 +16,9 @@ describe('useEffect Hook Test', () => {
it('简单使用useEffect', () => {
const App = () => {
const [num, setNum] = useState(0);
+ console.log('Render App');
useEffect(() => {
+ console.log('Effect');
document.getElementById('p').style.display = num === 0 ? 'none' : 'inline';
});
return (
@@ -27,9 +29,11 @@ describe('useEffect Hook Test', () => {
);
};
Horizon.render(, container);
- expect(document.getElementById('p').style.display).toBe('block');
+ expect(document.getElementById('p').style.display).toBe('block'); // <- none 异步
// 点击按钮触发num加1
- container.querySelector('button').click();
+ console.log('Click');
+ container.querySelector('button').click(); // <- none 异步
+
expect(document.getElementById('p').style.display).toBe('none');
container.querySelector('button').click();
expect(container.querySelector('p').style.display).toBe('inline');
diff --git a/scripts/__tests__/DomTest/DomInput.test.js b/scripts/__tests__/DomTest/DomInput.test.js
index 7d43b251..2e8ccc23 100755
--- a/scripts/__tests__/DomTest/DomInput.test.js
+++ b/scripts/__tests__/DomTest/DomInput.test.js
@@ -22,16 +22,6 @@ describe('Dom Input', () => {
).not.toThrow();
});
- it('checked属性受控时无法更改', () => {
- Horizon.render( {
- LogUtils.log('checkbox click');
- }} />, container);
- container.querySelector('input').click();
- // 点击复选框不会改变checked的值
- expect(LogUtils.getAndClear()).toEqual(['checkbox click']);
- expect(container.querySelector('input').checked).toBe(true);
- });
-
it('复选框的value属性值可以改变', () => {
Horizon.render(
{
@@ -96,30 +86,6 @@ describe('Dom Input', () => {
).not.toThrow();
});
- it('value属性受控时无法更改', () => {
- const realNode = Horizon.render( {
- LogUtils.log('text change');
- }} />, container);
-
- // 模拟改变text输入框的值
- // 先修改
- Object.getOwnPropertyDescriptor(
- HTMLInputElement.prototype,
- 'value',
- ).set.call(realNode, 'abcd');
- // 再触发事件
- realNode.dispatchEvent(
- new Event('input', {
- bubbles: true,
- cancelable: true,
- }),
- );
- // 确实发生了input事件
- expect(LogUtils.getAndClear()).toEqual(['text change']);
- // value受控,不会改变
- expect(container.querySelector('input').value).toBe('text');
- });
-
it('value值会转为字符串', () => {
const realNode = Horizon.render(, container);
expect(realNode.value).toBe('1');
@@ -249,30 +215,6 @@ describe('Dom Input', () => {
expect(document.getElementById('d').checked).toBe(true);
});
- it('受控radio的状态', () => {
- Horizon.render(
- <>
-
-
- >, container);
- expect(container.querySelector('input').checked).toBe(true);
- expect(document.getElementById('b').checked).toBe(false);
- Object.getOwnPropertyDescriptor(
- HTMLInputElement.prototype,
- 'checked',
- ).set.call(document.getElementById('b'), true);
- // 再触发事件
- document.getElementById('b').dispatchEvent(
- new Event('click', {
- bubbles: true,
- cancelable: true,
- }),
- );
- // 模拟点击单选框B,两个受控radio的状态不会改变
- expect(container.querySelector('input').checked).toBe(true);
- expect(document.getElementById('b').checked).toBe(false);
- });
-
it('name改变不影响相同name的radio', () => {
const inputRef = Horizon.createRef();
const App = () => {
diff --git a/scripts/__tests__/DomTest/DomSelect.test.js b/scripts/__tests__/DomTest/DomSelect.test.js
index dfd1828e..48932033 100755
--- a/scripts/__tests__/DomTest/DomSelect.test.js
+++ b/scripts/__tests__/DomTest/DomSelect.test.js
@@ -53,37 +53,6 @@ describe('Dom Select', () => {
expect(realNode.value).toBe('React');
});
- it('受控select', () => {
- const selectNode = (
-
- );
- const realNode = Horizon.render(selectNode, container);
- expect(realNode.value).toBe('Vue');
- expect(realNode.options[1].selected).toBe(true);
- // 先修改
- Object.getOwnPropertyDescriptor(
- HTMLSelectElement.prototype,
- 'value',
- ).set.call(realNode, 'React');
- // 再触发事件
- container.querySelector('select').dispatchEvent(
- new Event('change', {
- bubbles: true,
- cancelable: true,
- }),
- );
- // 鼠标改变受控select不生效
- Horizon.render(selectNode, container);
- // 'React'项没有被选中
- expect(realNode.options[0].selected).toBe(false);
- expect(realNode.options[1].selected).toBe(true);
- expect(realNode.value).toBe('Vue');
- });
-
it('受控select转为不受控会保存原来select', () => {
const selectNode = (