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 = (