首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如果未将var设置为redux状态,则导航。

如果未将var设置为redux状态,则导航。
EN

Stack Overflow用户
提问于 2019-06-04 08:01:30
回答 2查看 157关注 0票数 1

我在做一些连接/铭文的屏幕。我有一个最下面的标签按钮。目标是,如果用户点击它,它将显示他的前页,如果他是连接(我正在设置一个用户在我的redux商店),或显示一个登陆屏幕与登录按钮和订阅按钮,如果他不是。

如果redux商店是空的,每次用户单击我的底部选项卡栏上的"Profil“时,我如何导航到这个登陆页面?

这是我的密码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Screens / Profil.js

import React from "react";
import { StyleSheet, View, Text, Button } from "react-native";
import { color } from "../constants/color";
import { connect } from "react-redux";

/*
 *   Class Profil
 *   Appears when the users click on the profil button in the bottom tab bar
 *   Return JSX component
 */
class Profil extends React.Component {
  constructor(props) {
    super(props);
  }

  // This is what I have tried so far
  componentWillMount() {
    if (this.props.currentUser == null) {
      this.props.navigation.navigate("Landing");
    }
  }

  /*
   * Render the page
   * @param null
   * @return JSX component
   */
  render() {
    const { currentUser } = this.props;
    console.log(currentUser);
    if (currentUser == null) {
      return (
        <View style={styles.mainContainer}>
          <Text>You are not connected</Text>
        </View>
      );
    } else {
      return (
        <View style={styles.mainContainer}>
          <Text>Welcome {currentUser.user.username}</Text>
          <Button title="Déconnexion" onPress={this._disconnection} />
        </View>
      );
    }
    return null;
  }
}

const styles = StyleSheet.create({
  mainContainer: {
    flex: 1,
    backgroundColor: color.whisper
  }
});

const mapStateToProps = state => {
  return {
    currentUser: state.connection.currentUser
  };
};

export default connect(mapStateToProps)(Profil);

因此,当我第一次点击我的协议时,它在我的登陆页面上进行得很好:

但是,如果我再次单击Profil,它将不会显示我的登陆页面:

我想这是因为组件本身并没有改版。如何根据redux状态var处理常量重定向?

更新:我的堆栈导航器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const ProfilStackNavigator = createStackNavigator({
  Profil: {
    screen: Profil,
    navigationOptions: {
      title: "Profil"
    }
  },
  Landing: {
    screen: Landing,
    headerMode: "none",
    navigationOptions: {
      header: null
    }
  },
  SignUp: {
    screen: SignUp,
    navigationOptions: {
      title: "Inscription"
    }
  },
  SignIn: {
    screen: SignIn,
    navigationOptions: {
      title: "Connection"
    }
  }
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-04 10:48:55

我认为您有两个解决方案,第一个是使用NavigationEvents,第二个是navigationOptions

First option,将didFocus侦听器添加到您的profile组件中,当profile选项卡聚焦时,它将被触发。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Profil extends React.Component {

  subscribe = null;

  constructor(props){}

  focused = () => {
    if (this.props.currentUser == null) {
      this.props.navigation.navigate('Landing');
    }
  };

  componentDidMount = () => {
    this.subscribe = this.props.navigation.addListener('didFocus', this.focused);
  };

  componentWillUnmount() {
    this.subscribe && this.subscribe.remove();
    this.subscribe = null;
  }

  render() {
   ...
  }
}

第二个选项,使用navigationOptions add tabBarOnPress,单击选项卡后会触发该选项卡。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Profil: {
  screen: ProfilStackNavigator,
  navigationOptions: {
    tabBarLabel: 'Profil',
    tabBarOnPress: ({ navigation, defaultHandler }) => {
      // console.log('Pressed');
      defaultHandler();
    },
  },
},
票数 2
EN

Stack Overflow用户

发布于 2019-06-04 09:09:49

我成功地做到了这一点。你有正确的想法。

也许您的导航对象是问题所在?

下面是我为带有React/Redux/3的三维地震可视化器编写的一个示例。我将历史对象作为支柱传递给我的组件,并使用它动态更改路由。(不包括在示例中)

我建议确保您的路由器API是正确的,然后登录状态将挂载生命周期。

我希望这是有帮助的。祝你好运!)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const mapStateToProps = state => {
   return {
      ...
      quakes: state.viz.quakes,
      ...
   };
};


componentDidMount(){
   // if data hasn't download redirect to splash
   if (this.props.quakes[this.props.feedIndex].length === 0) {
     this.props.history.push("/"); 
   }
   ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56447510

复制
相关文章
React和Redux——状态管理Flux和Redux
在强调组件化的React中,我们需要以高内聚、低耦合的原则设计高可复用性的组件。因此渲染组件的数据由两部分组成,一个是由父组件传入的Props参数、一个是组件的内部状态State。Props参数可以是任何的Javascript对象,作为组件本身可以通过使用propTypes限制必须输入的参数和输入参数的类型以保证组件的可用性。State负责维护组件内部的状态,组件内部必要时可以通过触发父组件传递的回调函数传递信息给父组件或者将State以Props的形式传递给子组件。
lyndonxdlin
2018/07/05
1.9K0
mysql技巧:如果记录存在则更新/如果不存在则插入的三种处理方法
新增一个员工时,如果该员工已存在(以员工号f_emp_code作为判断依据),则更新,否则插入。而且工资f_salary,更新时,不得低于原工资(即:工资只能涨,不能降)。
菩提树下的杨过
2018/12/21
9.3K0
React/ReactNative 状态管理: redux 如何使用
有同学反馈开发 ReactNative 应用时状态管理不是很明白,接下来几篇文章我们来对比下 React 及 ReactNative 状态管理常用的几种框架的使用和优缺点。
张拭心 shixinzhang
2023/03/27
1.4K0
前端状态管理框架之Redux
随着应用程序单页面需求的越来越复杂,应用状态的管理也变得越来越混乱。应用的状态不仅包括从服务器获取的数据,还包括本地创建的数据,以及反应本地UI状态的数据,而Redux正是为解决这一复杂问题而存在的。
xiangzhihong
2022/11/30
1.1K0
翻译 | Thingking in Redux(如果你只了解MVC)
作者:珂珂(沪江前端开发工程师) 本文原创,转载请注明作者及出处。 原文地址:https://hackernoon.com/thinking-in-redux-when-all-youve-kn
iKcamp
2018/01/04
1.4K0
(十四)设置导航高亮
如果 <router-link/> 展示的路劲和当前 url 匹配就会自动给当前元素加上 ..router-link-active 这个 class 设置对应的 class 样式就可以了
老怪兽
2023/02/22
8000
(十四)设置导航高亮
Redux框架reducer对状态的处理
前言 在react+redux项目里,关于reducer处理state的方式,在redux官方文档中有这样一段描述: 不要修改 state。 使用 Object.assign() 创建了一个副本。不能这样使用Object.assign(state, {visibilityFilter: action.filter }),因为它会改变第一个参数的值。你必须把第一个参数设置为空对象。你也可以开启对ES7提案对象展开运算符的支持,从而使用 { ...state, ...newState }达到相同的目的。 对此
张逸
2018/03/07
2.2K0
React/ReactNative 状态管理终于懂了!redux redux-toolkit 与 rematch 对比总结
有同学反馈开发 ReactNative 应用时状态管理不是很明白,这个问题我之前刚接触 React 时也遇到过,看了好多文章和视频才终于明白,不得不说,React 及三方库这方面做的有点过于复杂了!
张拭心 shixinzhang
2023/03/27
2.3K0
React/ReactNative 状态管理终于懂了!redux redux-toolkit 与 rematch 对比总结
Maintenance Mode:把博客设置为维护状态的 WordPress 插件
Maintenance Mode 是一个 WordPress 插件,它的功能非常简单,能把你的 WordPress 博客设置为维护状态,这个功能特别有用,特别是你对博客测试建设期间不想公开的时候,或者进行一些改动还不想让用户看到的时候,这个是把博客设置为维护状态,当功能更新好,内容填充完再开放给用户使用。
Denis
2023/04/14
7750
Maintenance Mode:把博客设置为维护状态的 WordPress 插件
使用Redux和React-redux在React中进行状态管理
首先,我们需要使用create-react-app命令行工具安装新的react应用。
前端修罗场
2022/07/29
2.9K0
使用Redux和React-redux在React中进行状态管理
[ASP.NET] 如果将缓存“滑动过期时间”设置为1秒会怎样?
今天编写了一个采用ASP.NET Caching的组件,在为它编写Unit Test的过程中发现了一个有趣的问题,接下来我通过一个简单的实例说明这个问题。我们在一个控制台应用中编写了如下一段程序,这个段程序很简单:我们通过HttpRuntime的静态属性Cache得到表示当前缓存的Cache对象,并调用其Insert方法对当前的时间实施缓存。需要注意的是,我们采用“滑动时间”过期策略,并将这个滑动时间设置为1秒。 1: class Program 2: { 3: static vo
蒋金楠
2018/01/15
2K0
React/ReactNative 状态管理: redux-toolkit 如何使用
有同学反馈开发 ReactNative 应用时状态管理不是很明白,接下来几篇文章我们来对比下 React 及 ReactNative 状态管理常用的几种框架的使用和优缺点。
张拭心 shixinzhang
2023/03/27
1.8K0
React引入Redux实现组件间共享状态
安装 npm install redux -s 在src目录下新建store文件夹,新增index.js文件 导入redux基本模块 import { createStore } from 'redux'; const store = createStore(); export default store; 再新增reducer.js文件,这里存放共享的变量 const defaultState = { countNum: 0 } export default (state = defaultSta
明知山
2021/06/21
9000
iOS 15导航栏设置
使用Xcode 13.0运行项目到iOS 15的手机上,出现导航栏黑色。但是在低版本Xcode 运行到手机就没有问题。
莫空9081
2021/09/03
1.9K0
Suffusion设置主导航菜单
换用Suffusion主题之后,把菜单栏变成导航横到网站上方了,但是过了很久之后发现不知道以前从哪里设置的这些东西,今天偶然又找到,赶紧记录下来,以防忘记。
the5fire
2019/02/28
1.4K0
未将对象引用设置到对象的实例–可能出现的问题总结
1、ViewState 对象为Null。 2、DateSet 空。 3、sql语句或Datebase的原因导致DataReader空。 4、声明字符串变量时未赋空值就应用变量。 5、未用new初始化对象。 6、Session对象为空。 7、对控件赋文本值时,值不存在。 8、使用Request.QueryString()时,所获取的对象不存在,或在值为空时未赋初始值。 9、使用FindControl时,控件不存在却没有做预处理。 10、反复定义造成未将对象引用设置到对象的实例错误.
全栈程序员站长
2021/11/24
5.1K0
php中时区设置(不设置则时间显示出错)
具体设置方法: 在php.ini中设置date.timezone的值为PRC,设置好以后的为:date.timezone=PRC,同时取消这一行代码的注释,即去掉前面的分号就可以了。     如果还不放心则在php中用以下语句进行测试:     $now = date('Y-m-d H:i:s', time());     echo $now."<br/>";
闵开慧
2018/03/30
3.9K0
GridView 设置选中状态
设置原理 是将bean中的数据加入一个字段isSelect  默认填充数据的时候 ,默认选中的第一个值 设置为true,其余的都设置为false.
再见孙悟空_
2023/02/10
9460
用 Redux 做状态管理,真的很简单🦆!
作为一名前端工程师,不少小伙伴对于 Redux 的概念、使用可能还是比较模糊,上手使用的心智负担也比较重!
小东同学
2022/07/29
3.5K0
用 Redux 做状态管理,真的很简单🦆!
nginx设置header如果没有值
map 指令是由 ngx_http_map_module 模块提供的,默认情况下安装 nginx 都会安装该模块。
十毛
2022/08/23
1.4K0
nginx设置header如果没有值

相似问题

JS -如果var为空,则设置值速记

13

未将文件上载设置为状态

13

如果未设置var,则即使设置了var,其结果也始终为true

32

如果未将本机隐藏<Text>设置为true,则响应本机隐藏

12

jquery将变量设置为true,如果var为true,则获取

31
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文