快乐冲浪与生活

多体验、多体会、多体悟

0%

信号与槽

  • 信号(Signal):对象在状态发生变化时主动发出的通知,本身不包含业务逻辑。
    • 由 Qt 内置控件预先定义(clicked / textChanged / valueChanged),或者自定义信号
    • 信号可以携带参数,用于把数据传递给接收方
  • 槽(Slot):普通可调用函数(方法),用来响应信号;信号触发时,槽函数被执行。
    • 可以是类成员方法、普通函数、lambda
    • 槽的参数数量 ≤ 信号参数数量;多余参数可以设置默认值

核心优势:解耦。发送方只负责发信号,不需要知道谁接收;接收方只负责处理,不需要持有发送方强依赖。 底层:属于发布订阅模型。

Casbin 是一个基于声明式访问控制引擎,用于在应用中实现访问控制策略。

Casbin 只负责授权,不负责认证。

基础概念

Casbin 包含 5 个核心组件:

  1. 模型(Model):定义一套权限“语法框架”,规定请求长什么样、策略字段有哪些、怎么匹配、命中后怎么算结果。
  2. 策略(Policy):具体的权限记录,是填充到 Model 模板里的实例数据。
  3. 执行器(Enforcer):调度中心,绑定 Model + Adapter,对外提供鉴权、策略管理 API。
  4. 适配器(Adapter):隔离 Enforcer 和存储介质,负责 Policy 的读。
  5. 匹配器(Matcher):定义了主体和资源的匹配规则,用于判断是否命中策略。

Enforcer 不是线程安全。生产一般全局单例;写策略的时候建议加锁。

什么是 useCallback

区别于 useMemo,useCallback 缓存函数引用,依赖不变时,多次渲染返回同一个函数对象,不是缓存函数执行结果。

格式如下:

1
2
3
4
5
6
const memoFn = useCallback(
  (...args) => {
    // 你的逻辑
  },
  [deps]
)
  • 参数 1:要缓存的函数
  • 参数 2:依赖数组,依赖不变时,函数引用不变
  • 返回值:缓存后的函数引用

与 useMemo 的等价写法:

什么是 useMemo

useMemo 是 React 提供的一个 Hook,用来将计算结果缓存起来,只有当依赖项发生变化时才会才会重新计算。

useMemo 不保证一定缓存命中,在内存压力、并发渲染等情况下,React 可能丢弃缓存并在下次渲染时重新计算。