先说下为啥会有这一篇?我们知道tsx 实则就是 typescript xml ,即能支持写诸如<View/>、<Text/>、<div/>等标签的脚本。
但使用 taro init 初始化的工程,入口文件不是tsx,而是ts。这意味着,我不能在里面写标签,更意味着我不能写一个全局Context(不熟悉的可以先科普一下:react context),让所有的页面(列如tabbar)都能用到。
缘由很简单:Context的数据流也是自上而下的,没有一个顶层的Context把所有的子组件包住,这些子组件就没法公用同一个Context。
如果在 ts 中写标签会出现如下的错误:

而Context 在react中使用的时候也是以标签的形式出现的,这意味着我想用一个在顶层的全局Context,就必须要把 app.ts 改成 app.tsx。
修改一
直接将app.ts 改成 app.tsx
结果如下:

-
app.ts改成app.tsx后,报错已经消失,并且微信开发者工具也能正常调试代码。
但问题没有这么简单,由于:我们的react-native端,会出现白屏:
修改二
将app.ts 改成 app.tsx后,把里面的View 这种有实际意义的标签给去了,只保留<ContextAuth.Provider> 这种没有实际意义,只为了提供全局Context的标签。
import React, {Component, PropsWithChildren, useContext, useState} from react
import ./app.scss
import {ContextAuth} from "./register-center/context-app/auth/context-auth";
import Taro from @tarojs/taro
import {View} from "@tarojs/components";
export default function App(props) {
// const {} = props
const contextAuth = useContext(ContextAuth)
const [auth, setAuth] = useState({...contextAuth[0]})//权限控制
return <ContextAuth.Provider value={[auth, setAuth]}>{props.children}</ContextAuth.Provider>
}

-可以看到,改完后,react-native端恢复正常。
至于为啥react-native端在app.tsx中包含View时会出现异常,我就没做深入研究了,感兴趣的朋友,可以交流一波。这次的试验的结果是:app.tsx中允许出现Context标签但不能包含有实际意义的标签。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
您必须登录才能参与评论!
立即登录

也许七镜哥可以试试导入reactDOM,react可以将HTML标签转化为虚拟DOM,但是要渲染的话需要reactdom将虚拟DOM转化为真实DOM才可以渲染哈哈 个人感觉,不一定可行🤔
哈哈 我比较菜😂😂 只是第一想法是这样的,刚刚又想了想,应该不是这个原因😅
@YiYa_咿呀 可以试试的,小单对react的知识结构了解的还不错👍