处理umi国际化useIntl不能在类组件中使用

[有猿友说ta在类组件中不能使用,我在新的地方复现的时候发现确实;之前的实现无疑中绕过了useIntl,只是表面上实现了可以在类组件中使用;因此产生本次更新,将国际化完全困在一个函数组件中,这样就真的不管外面怎么调用了,因为之前进行了封装 ,因此本次修改 不会影响之前代码的编写--》更新IntlInit在在其中调用一个函数组件完成国际化功能

使用umi中useIntl在类组件中时报错。

 Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:

  1. You might have mismatching versions of React and the renderer (such as React DOM)
  2. You might be breaking the Rules of Hooks
  3. You might have more than one copy of React in the same app

相关问题描述

  • 在非函数式组件中使用formatMessage 报错
  • 无法在类组件中使用useIntl
  • umi国际化不能在类组件中使用
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
umi框架,可以使用dva来实现两个组件之间数据传递。具体实现方式如下: 1. 在一个组件,通过dispatch函数来派发一个action,这个action的type字段可以用来表示要传递的数据型。 2. 在另一个组件,可以监听这个型的action,当接收到这个action时,可以通过reducers函数将这个数据保存下来,然后用connect函数将这个数据映射到当前组件的props。 3. 在第一个组件,可以通过绑定事件的方式来监听第二个组件的props的数据是否发生了变化,如果发生了变化,则可以执行相应的回调函数来处理这个变化。 例如,假设有两个组件A和B,需要在A传递数据给B,具体实现方式如下: 1. 在组件A,通过dispatch函数派发一个action,并传递一个payload参数。 ``` import { connect } from 'dva'; function ComponentA({ dispatch }) { function handleButtonClick() { dispatch({ type: 'componentsB/setData', payload: { name: '张三', age: 20 }, }); } return ( <div> <button onClick={handleButtonClick}>传递数据</button> </div> ); } export default connect()(ComponentA); ``` 在这里,我们派发了一个名为componentsB/setData的action,它的payload参数是一个包含了name和age字段的对象。 2. 在组件B,监听componentsB/setData这个型的action,并通过reducers函数来修改当前状态: ``` import { connect } from 'dva'; function ComponentB({ name, age }) { return ( <div> <p>姓名:{name}</p> <p>年龄:{age}</p> </div> ); } export default connect(({ componentsB }) => ({ name: componentsB.name, age: componentsB.age, }))(ComponentB); // reducers.js const initialState = { name: '', age: 0, }; export default { namespace: 'componentsB', state: initialState, reducers: { setData(state, { payload }) { return { ...state, ...payload, }; }, }, }; ``` 在这里,我们通过connect函数将componentsB的name和age映射到当前组件的props,并通过reducers函数来修改当前状态。 3. 在组件A,监听组件B的props的数据是否发生了变化,并执行相应的回调函数来处理这个变化: ``` import { connect } from 'dva'; function ComponentA({ name, age }) { function handleDataChange() { console.log(`姓名:${name},年龄:${age}`); } return ( <div> <p>姓名:{name}</p> <p>年龄:{age}</p> <button onClick={handleDataChange}>处理数据变化</button> </div> ); } export default connect(({ componentsB }) => ({ name: componentsB.name, age: componentsB.age, }))(ComponentA); ``` 在这里,我们通过connect函数将componentsB的name和age映射到当前组件的props,并通过绑定事件的方式来监听props的数据是否发生了变化,如果发生了变化,则执行handleDataChange函数来处理这个变化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值