vue迁移react使用useReducer hooks还想支持回调?
如果您发现本文排版有问题,可以先点击下面的链接切换至老版进行查看!!!
vue迁移react使用useReducer hooks还想支持回调?
鉴于目前有个任务是把手上的vue项目迁移到react,为了尽可能的降低期间造成的功能缺陷,很自然的就会想到使用一个方法一个方法的迁移,有的场景在vue中很自然,在react中,尤其是在使用react hooks时,有的过程就不好弄,我就毕竟苦于在react hooks中没有class组件里面的setState的回调函数,导致后面的取值拿不到最新的state。 比如下面的例子。
In vue
export default {
name: 'VueComponent',
data() {
return {
a: 'a',
b: 'b',
};
},
mounted() {
console.log('result', this.funA()); // 1221--b
},
methods: {
funA() {
this.a = '1221';
this.funB();
return this.funC();
},
funB() {
this.a = this.a + '--';
},
funC() {
return this.a + this.b;
}
}
};
To react
import React, { useReducer } from 'react';
const [state, dispatch] = useReducer((state, action) => {
switch(action.type) {
case 'clear':
retrun {
a: '',
b: '',
}
case 'upate':
}
return {
...state,
...payload,
};
}, {
a: 'a',
b: 'b',
});
function funA() {
dispatch({
a: '1221',
});
funB();
return funC();
}
function funB() {
dispatch({
a: state.a + '--',
});
}
function funC() {
return state.a + state.b;
}
useEffect(() => {
console.log('useEffect -> ', funA()); // "ab", not the expected "1221--b" like in vue
}, []);
为此自己做了一个简单的npm包,报名就是react-hooks-like-vue, 用了这个包就会是这样,比较解决原来vue中的写法。
import { useDispatch } from 'reac-hooks-like-vue';
const [state, dispatch] = useDispatch({
a: 'a',
b: 'b',
});
function funA() {
dispatch({
a: '1221',
});
funB();
return funC();
}
function funB() {
dispatch({
a: state.a + '--',
});
}
function funC() {
return state.a + state.b;
}
useEffect(() => {
console.log('useEffect -> ', funA()); // "1221--b", as expected, like in vue
}, []);
- 分类:
- Web前端
更新时间:
相关文章
对React Hooks的Capture value特性的理解
之前我的项目里面很多功能都是用的事件驱动,所以下面的实例也会更多地使用监听事件的回调函数。 我们先看下测试代码 const {useEffect ,useState, useRef, us 阅读更多…
项目Vue转成React hooks可能存在的问题--急需类似setState回调
假设在Vue中有如下三个方法,并且初始时 this.a = ‘a’; this.b = ‘b’; funA() { this.a = '1221 阅读更多…
转译:使用react hooks优化回调函数在组件间的传递,useState,useReducer?
我们先看一下使用 useState hooks写的todoList组件,里面我们需要层层传递回调函数。 import React, { useState } from "react& 阅读更多…