Reactjs 颤振中'componentDidMount()'的等效项是什么

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

我来自ReactJS和ReactNative。我想试试颤振。到目前为止,我想有一个登录屏幕。因此,我想检查用户是否已经登录。如果是,请转到主屏幕。如果没有,则显示登录屏幕

在使用TypeScript和Firebase时,我会这样做:

接口根屏幕状态{
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存储库中创建了一个问题