trao hooks修改state后无法获取最新dom节点

150 阅读1分钟

准备用taro写一个微信小程序,但是没有足够的时间来详细的看api文档,所以就在实际的使用过程中遇到问题了再查技术文档;其中遇到了不少的坑。

image.png

1. 点击左侧分类,修改了scrollIntoView的绑定,但是不跳转到指定的位置

查了技术文档,trao的技术文档有这样一句话:

使用竖向滚动时,需要给scroll-view一个固定高度,通过 WXSS 设置 height。组件属性的长度单位默认为 px

解决方案:给scroll-view增加高度

2. 数据更新后不能获取到dom节点

由于我是使用的react 函数式组件,所以不能使用this.setData()方法的回调函数内获取dom节点,所以不能按照官网的说法获取dom节点。

最开始的思路是获取到数据后,等页面渲染完成后就立马获取dom节点的位置,所以我使用了setTimeout来调用getHeightList方法,然后最后返回的是null;反复看了官方尝试了各种方法后,我决定用useEffect监听data变化后再获取dom节点位置,结果成功了。看代码!!!

useEffect(() => {
    getClassifyList();
}, []);

// 监听到data变化后再获取dom节点位置
useEffect(() => {
    Taro.nextTick(() => {
        getHeightList().then((re) => console.log(re, '777'));
    });
}, [menus]);

const getClassifyList = async () => {
    const res = await getClassify();
    setMenus(() => res.data.lists);
    setListId(res.data.lists[0]?.menuid);

};

const getHeightList = () => {
    const query = Taro.createSelectorQuery();
    query.selectAll('.class-title').boundingClientRect();
    return new Promise((resolve, reject) => {
        query.exec((res) => {
            resolve(res);
        });
    });
};