Reactjs 颤振中'componentDidMount()'的等效项是什么
我来自ReactJS和ReactNative。我想试试颤振。到目前为止,我想有一个登录屏幕。因此,我想检查用户是否已经登录。如果是,请转到主屏幕。如果没有,则显示登录屏幕 在使用TypeScript和Firebase时,我会这样做:Reactjs 颤振中'componentDidMount()'的等效项是什么,reactjs,react-native,flutter,dart,state,Reactjs,React Native,Flutter,Dart,State,我来自ReactJS和ReactNative。我想试试颤振。到目前为止,我想有一个登录屏幕。因此,我想检查用户是否已经登录。如果是,请转到主屏幕。如果没有,则显示登录屏幕 在使用TypeScript和Firebase时,我会这样做: 接口根屏幕状态{ isLoading:布尔值; 用户:firebase.user | null; } 类RootScreen扩展了React.Component{ 建造师(道具){ 超级(道具); 此.state={ 孤岛加载:是的, 用户:空 } } compon
接口根屏幕状态{
isLoading:布尔值;
用户:firebase.user | null;
}
类RootScreen扩展了React.Component{
建造师(道具){
超级(道具);
此.state={
孤岛加载:是的,
用户:空
}
}
componentDidMount(){
//对某些firebase库进行异步调用以查找存储的用户凭据
//如果找到某些凭据,请尝试登录
//找不到任何凭据或登录失败返回null
//否则将返回用户
tryToLogin().then((当前用户:firebase.User | null)=>{
这是我的国家({
孤岛加载:false,
用户:当前用户
}).catch(err=>{/*执行一些错误处理*/});
}
render(){
const{isLoading,user}=this.state;
如果(isLoading)返回(/*加载屏幕*/);
else if(user==null)返回(/*登录屏幕*/);
否则返回(/*主屏幕*/);
}
}
如何处理颤振?我找不到任何与
componentdidmount()
等效的东西,我应该在构造函数中执行它吗?在React中,这将失败。在有状态小部件中使用initState。当第一次绘制有状态小部件时,会调用initState
class _MyAppState extends State<MyApp> {
Future<Album> futureAlbum;
@override
void initState() {
super.initState();
futureAlbum = fetchAlbum();
}
class\u MyAppState扩展状态{
未来专辑;
@凌驾
void initState(){
super.initState();
futureAlbum=fetchAlbum();
}
您可以在颤振的initState
中执行此操作。
当呈现小部件树时,首先调用它
检查以下代码:
@override
void initState() {
super.initState();
}
有关React Native中的各种内容的更多详细信息,请参阅Flatter。
请参阅下面的链接:这是来自本地背景的人们来到弗利特的官方文档
我希望这会有所帮助。当涉及到从服务器请求数据时,您可能希望直接使用 有时,如果不正确地将状态设置为初始状态,小部件构建将触发两次
我更喜欢将FutureBuilder放入小部件构建范围,对我来说更清晰易读。在您的情况下,由于您也使用导航,我将使用
FutureBuilder
。初始化框架,查找用户,并根据initialroute的状态将用户导航到正确的屏幕
如果您希望它更好,您可以使用SplashScreen
。您可以使用的一个好软件包是。您还可以在这里找到完整的示例
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
回归未来建设者(
//您正在等待的事件(也可以是您的用户对象,一旦加载)
未来:_initializeFrameworks,
生成器:(上下文,快照){
//显示启动屏幕
if(snapshot.connectionState==connectionState.waiting){
返回材料应用(主页:SplashScreen());
}否则{
//返回应用程序并导航
返回材料PP(
initialRoute:snapshot.data?MainScreen.id:WelcomeScreen.id,
路线:{
WelcomeScreen.id:(上下文)=>WelcomeScreen(),
MainScreen.id:(上下文)=>MainScreen(),
},
);
}
},
);
}
}
类Mainscreen扩展了无状态小部件{
静态常量id=“主屏幕”;
//你的小部件在这里
}
类WelcomeScreen扩展了无状态小部件{
static const id=“欢迎屏幕”;
//你的小部件在这里
}
flatter文档应该在中提到这一点。还是我错过了?谢谢。我已经检查过了,但错过了关于React lifecycle方法等价物的解释。在他们的GItHub存储库中创建了一个问题