我是否需要使用Redux或Context API

时间:2019-04-19 07:04:52

标签: javascript reactjs react-native redux jsx

我有一个应用程序,用户像往常一样先登录。我的应用程序有几个屏幕,可通过react-native-navigation进行导航。

在除登录之外的每个屏幕中,我都需要知道哪个用户正在使用我的应用程序,因为内容是由其唯一ID专用的。当用户成功登录时,我会获得该uniqueID,但是我不知道如何将此唯一ID传递到其他屏幕。

我是否需要使用Redux或上下文API来处理此问题,或者是否存在另一种在不更改项目的情况下在屏幕之间来回传递数据的方法。

这是我的App.js:

obj.set('strokeUniform', true);

这是我的导航器组件:

import React, { Component, PropTypes } from 'react';
import { AppNavigator } from './components/Navigator';


 class App extends React.Component {
  render() {
    return (
      <AppNavigator />
    );
  }
}
export default App;

4 个答案:

答案 0 :(得分:2)

我认为您按照共享代码使用React Navigation。我建议您按照建议的here实施身份验证流程,并使用 Redux 设置/访问uniqueID。 Redux提供了更多功能,并广泛用于状态管理。
您可以在_signInAsync()中设置uniqueID,然后通过进行访问。 LocalStorage可能是一种选择,但不是可行的解决方案,因为从LocalStorage访问值可能会影响应用程序性能。

答案 1 :(得分:2)

要将数据传递到其他屏幕,可以使用React Navigation导航方法并将一些数据传递到其中。

无论使用Realm还是SQLite等数据库,我都不知道如何存储数据,但是无论何时从那里获取数据并将其传递给其他屏幕, strong>请按照以下步骤操作:

this.props.navigation.navigate('SecondPage', {
        //your data goes here
        });

例如:

this.props.navigation.navigate('Homescreen', {
       username: this.state.username,
       });

然后您可以获取如下数据:

const username = navigation.getParam('username', 'Default'); //default is a value that will be used if there was no username passed 

答案 2 :(得分:1)

redux或react-context

“ Redux是JavaScript应用程序的可预测状态容器。”

“上下文提供了一种通过组件树传递数据的方法 无需在每个级别手动传递道具。”

对于低频更新(例如语言环境,主题更改,用户身份验证等),React Context非常合适。但是对于具有高频更新的更复杂的状态,React Context将不是一个好的解决方案。因为,React Context将在每次更新时触发重新渲染,因此手动优化它确实很困难。在那里,像Redux这样的解决方案更容易实现。

何时使用上下文API

如果您仅在使用Redux以避免将props传递给深度嵌套的组件,则可以使用Context API替换Redux

何时使用Redux

Redux是可预测的状态容器,它可以在组件之外处理应用程序的逻辑,集中化应用程序的状态,使用Redux DevTools跟踪何时,何地,为什么以及如何更改应用程序的状态,或者使用诸如Redux Form之类的插件, Redux Saga,Redux撤消,Redux Persist,Redux Logger等。

在这种情况下,我们可以使用Redux。

答案 3 :(得分:0)

Redux ContextApi 都是您应用的状态管理器。它们对您的应用程序有一些优点和缺点。

dan_abramov(Redux创建者)的推文:

  

我的个人总结是,新上下文已准备好用于   低频的不太可能的更新(例如语言环境/主题)。这样做也很好   以与使用旧上下文相同的方式使用它。对于静态值   然后通过订阅传播更新。还没准备好   代替了所有类似Flux的状态传播。

实际上,我宁愿在您的情况下使用Redux。