0.1.5 • Published 10 months ago

@kne/use-event v0.1.5

Weekly downloads
-
License
ISC
Repository
-
Last release
10 months ago

use-event

描述

实现了事件总线的hooks,是fbemitter的再封装

安装

npm i --save @kne/use-event

概述

可以通过这个钩子构造一个事件总线来实现事件的发布订阅。

这通常可以用于某些特殊场景,但是还是要优先考虑context做组件的数据共享而不是滥用事件。

事件绑定后不能触发的可能情况

  • 检查项目中是否安装了多个包版本,导致绑定事件的对象和触发事件的对象不是一个对象实例
  • 是否事件触发在事件绑定之前已经执行了,事件绑定后没有事件触发

示例

示例代码

  • 基本事件示例
  • 展示了在一个组件里监听事件,在另一个组件里面触发事件的简单场景
  • _useEvent(@kne/use-event),button(antd/lib/button),_message(antd/lib/message)
const { default: useEvent } = _useEvent;
const { useEffect, createContext, useContext } = React;
const { default: message } = _message;
const { default: Button } = button;

const context = createContext({});
const { Provider } = context;

const SubComponent = () => {
  const { emitter } = useContext(context);
  return <Button onClick={() => {
    emitter.emit('event', '我是一个按钮触发事件');
  }}>触发事件</Button>;
};

const BaseExample = () => {
  const emitter = useEvent({debug:true,name:'test'});
  useEffect(() => {
    const sub = emitter.addListener('event', (args) => {
      message.success(`事件event触发,参数:${args}`);
    });
    return () => {
      sub && sub.remove();
    };
  }, [emitter]);
  return <Provider value={{ emitter }}>
    <SubComponent/>
  </Provider>;
};

render(<BaseExample/>);

API

const emitter = useEvent(debug);

属性名说明类型默认值
options{debug,name} debug:是否开启调试模式,开启后控制台上会将收到的事件及参数打印出来帮助您调试代码,name:事件名称,会显示在debug信息里面。注意:options里面的参数只能初始化设定一次,不能根据props的修改而修改object{debug:false}

返回值 emitter api

属性名说明类型参数说明
addListener监听一个事件functionaddListener(eventName,args) eventName为事件名称,args为可以传递的参数
emit触发一个事件functionemit(eventName,args) eventName为事件名称,args为可以传递的参数
removeAllListeners删除所有事件监听function-
listeners所有监听事件列表array-
once监听一个事件,但是在触发一次后就会被自动销毁functiononce(eventName,args) eventName为事件名称,args为可以传递的参数

监听事件后返回对象

属性名说明类型参数说明
remove删除该事件监听function-