Skip to content
This repository has been archived by the owner on Mar 7, 2024. It is now read-only.

[RFC]重新设计事件 hooks #179

Closed
yesmeck opened this issue Aug 28, 2019 · 13 comments · Fixed by #722
Closed

[RFC]重新设计事件 hooks #179

yesmeck opened this issue Aug 28, 2019 · 13 comments · Fixed by #722
Labels

Comments

@yesmeck
Copy link
Member

yesmeck commented Aug 28, 2019

之前把所有事件分别做成 hooks 是考虑到类型约束和避免字符串的拼错,但是现在发现支付宝小程序的事件有点多,每个事件都做成 hook 的话 API 就会有点多。

考虑把所有事件统一做到 useEvent hook 里:

import { useEvent, OnKeyboardHeightEvent } from 'remax/alipay';

export default  () => {
  useEvent('onBack', () => {
     console.log('back');
  });

  useEvent('onKeyboardHeight', (e: OnKeyboardHeightEvent) => {
    console.log('键盘高度:', e.height)
  });
}

支付宝小程序事件处理 https://docs.alipay.com/mini/framework/page-detail#%E9%A1%B5%E9%9D%A2%E4%BA%8B%E4%BB%B6%E5%A4%84%E7%90%86%E5%87%BD%E6%95%B0

@Darmody
Copy link
Contributor

Darmody commented Aug 28, 2019

可以保留之前的,再加一个 useEvent

@yesmeck
Copy link
Member Author

yesmeck commented Aug 28, 2019

要保留,然后显示废弃提醒。

@Darmody
Copy link
Contributor

Darmody commented Aug 28, 2019

class 组件呢

@yesmeck
Copy link
Member Author

yesmeck commented Aug 28, 2019

class 组件还是在 class 上直接写 onBack

@malash
Copy link

malash commented Aug 30, 2019

useEvent 的形式会不会不太适合TypeScript类型检查?

@yesmeck
Copy link
Member Author

yesmeck commented Aug 30, 2019

TypeScript 没事吧,第一个参数用 union type,之前主要是考虑到 JavaScript 容易拼错第一个参数。

@LingYanSi
Copy link

TypeScript 没事吧,第一个参数用 union type,之前主要是考虑到 JavaScript 容易拼错第一个参数。

@yesmeck 这种方式如何

import { useEvent, OnKeyboardHeightEvent, eventType } from 'remax/alipay';
useEvent(eventType.back, () => {
     console.log('back');
});

@yesmeck
Copy link
Member Author

yesmeck commented Sep 25, 2019

@LingYanSi 这样没有类型检查的话还是容易拼错。

@LingYanSi
Copy link

image
@yesmeck 这样是否可以满足类型检查

@yesmeck
Copy link
Member Author

yesmeck commented Sep 25, 2019

用 ts 的话字符串也没问题的,主要是 js 。

@LingYanSi
Copy link

那感觉这种担心是多余的,做好语法智能提示就好了。

@Darmody
Copy link
Contributor

Darmody commented Sep 25, 2019

用字符串,ts写好enum。然后可以在useEvent里对字符串做一次校验,不存在的抛错。

这样应该就好了

@ilovedesert001
Copy link

与其这样

import { useEvent, OnKeyboardHeightEvent, eventType } from 'remax/alipay';
useEvent(eventType.back, () => {
     console.log('back');
});

为什么不直接

import { xxxEvents, OnKeyboardHeightEvent, eventType } from 'remax/alipay';
xxxEvents.useOnBack(() => {
     console.log('back');
});

这样代码压缩的时候,效率不是更高吗?
而且 ts 写起来也更加容易

@yesmeck yesmeck added the rfc label Nov 18, 2019
@yesmeck yesmeck closed this as completed Jan 8, 2020
@Darmody Darmody reopened this Mar 18, 2020
Darmody added a commit that referenced this issue Mar 18, 2020
Darmody added a commit that referenced this issue Mar 18, 2020
Darmody added a commit that referenced this issue Mar 18, 2020
Darmody added a commit that referenced this issue Mar 19, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants