class A { static contextType = BaseContext; componentDidMount(){ // 根据BaseContext初始化一些内容 this.doSomething(); } doSomething(){ // BaseContext 的值可能会变,需要在context值变化后执行这个函数 this.name = this.context.name this.setState({ age: this.context.age }) }}
问题:
BaseContext
的值可能会变,如何在context值变化后执行doSomething
函数?官方说这个情况怎么做,这个是不是需要自己实现一个订阅函数传到子组件内?cpomputed(计算属性)
的概念吗?上面的例子中可以转化为计算属性来优化吗?用Context.Consumer
import React from 'react';import { BaseContext } from './BaseContext';class A extends React.Component { doSomething = (context) => { this.name = context.name; this.setState({ age: context.age, }); } render() { return ( <BaseContext.Consumer> {context => { this.doSomething(context); return <div>Your component content</div>; }} </BaseContext.Consumer> ); }}
react类里面没有计算属性,可以用funtion,除了老项目现在都是用funtion,加hook,你可以自定以一个hooks,不过可以通过class得get方法,可以依赖于props或者state:
class Demo extends React.Component { constructor(props) { super(props) this.state = { count: 1 } } get otherCount() { return this.state.count + 1 } render() { return <div>{this.otherCount}</div> }}
直接在render方法里面写,因为state和props的改变会触发render的执行
class Demo extends React.Component { constructor(props) { super(props) this.state = { count: 1 } } render() { return <div>{this.state.count + 1}</div> }}
function组件可以使用useMemo
import React, { useState, useMemo } from 'react';function Demo() { const [count, setCount] = useState(0); const double = useMemo(() => { return count * 2; }, [count]) return ( <div> {double} </div> )}
转自:react实现计算属性
我有一些“ChangeMainItem”操作(在我的例子中,它是由外部系统或可能的组件之一调度的)。此操作(例如)仅更新reducer中状态的一个属性(例如)。 我的组件A和B需要对此状态更改做出反应:显示加载指示器、获取其他数据并显示结果。顺序动作可以通过一些异步动作库来完成,但是我应该把调度异步动作放在哪里呢?显然,我不能在组件A和B的reducer中分派异步操作,我也不想将原始操作更改为异步
请帮助我订阅更改的变量。我做了简单的微调。服务中的微调状态(真|假)存储: 在组件模板中,我通过条件显示微调器: 在组件中,我尝试订阅服务isVisibleSpinner变量中的更改: 但控制台输出遵循错误消息: 类型“boolean”不可分配给类型“Observable”。
我正在学习Angular 5+,最近来到主题/订阅部分,我看到很多教程都希望以特定的方式使用订阅: 在组件中声明订阅 通过服务的主题或ngrx/store在ngOnInit中订阅 在ngondestroy中取消订阅 null
我在IBM cloud IoT平台上有一个设备,我想订阅mendix的活动...我正在使用MQTT客户端表单mendix应用商店订阅设备事件。 项目资源管理器: MQTT订阅
问题内容: 我在上下文中有如下语言设置 我的应用程序代码如下所示 我的页面具有切换语言的组件 在这种情况下,需要更新上下文以将语言更改为“ jp”,如下所示 如何从LanguageSwitcher组件内部更新上下文? 问题答案: 挂钩是在16.8.0中引入的,因此以下代码要求最低版本为16.8.0(向下滚动以获得类组件示例)。CodeSandbox演示 1.为动态上下文设置父状态 首先,为了拥有可
mysql会员订阅数据表的设计应该如何设计?产品有订阅商品和非订阅的,每次都只能购买一个。 订阅有1个月 3个月的 每次到期自动扣费。如果在一个月类购买了几个订阅商品 则扣费按照最新的一个 然后延长到期时间。其实是不是每次订阅都不需要生成新订单的 翻阅了其他资料都找不到很好的设计