1 创建
ini
var UserNameLocal = compositionLocalOf { "" }
var passwordLocal = staticCompositionLocalOf { "" }
2 使用
csharp
var userName by mutableStateOf("")
var password by mutableStateOf("")
scss
CompositionLocalProvider(
UserNameLocal provides userName,
PasswordLocal provides password
) {}
那么在CompositionLocalProvider的子节点中就可以通过
PasswordLocal.current
UserNameLocal.current
来访问设置的数据。
当修改userName 跟 password的数据也会触发刷新。
3 compositionLocalOf 与 staticCompositionLocalOf 的不一样的地方是:compositionLocalOf数据发生改变的时候只重组调用他的地方。staticCompositionLocalOf是直接全量重组。(未验证)
4 个人理解:
如果只是上面的功能的话,我直接全局定义一个状态变量,也可以访问到对应的数据,改变数据的时候也会触发重组。那compositionLocalOf的优点是什么呢?
优点:限制了访问范围,只有在CompositionLocalProvider的子节点中可以访问到。