React Native:如何更改 onPress 事件的视图

Posted

技术标签:

【中文标题】React Native:如何更改 onPress 事件的视图【英文标题】:React Native : how to change view on onPress event 【发布时间】:2016-01-30 03:25:14 【问题描述】:

我的第一个渲染视图(默认视图)上有一个按钮,我想在用户按下该按钮时更改视图。

我知道如何使用onPress 事件,但我不知道应该如何更改整个视图?我正在创建另一个react.createClass,其中包含新的渲染和其他内容,但我不知道应该如何使用它来更改View

这是我的第一个视图(主要视图)(顺便说一下应用程序名称是 sess):

var sess = React.createClass(
  render()
    return(

      <View>
        <Button> change view </Button>  //onPress is gonna be here
      </View>
    );
  ,
);

我希望将视图更改为:

var newView = React.createClass(
  render()
    return(

      <View>
        <Text> the View is now changed </Text>
      </View>
    );
  ,
);

【问题讨论】:

【参考方案1】:

你可以这样做:

var sess = React.createClass(

  getInitialState()
    return 
      viewOne: true
    
  ,

  changeView()
     this.setState(
       viewOne: !this.state.viewOne
     )
  ,

  render()
    if(!this.state.viewOne) return <newView changeView= () => this.changeView()  />
    return(
      <View>
        <Button onPress= () => this.changeView() > change view </Button>
      </View>
    )
  
)

var newView = React.createClass(
  render()
    return(
      <View>
        <Text onPress=this.props.changeView> the View is now changed </Text>
      </View>
    );
  ,
);

【讨论】:

谢谢。这真是一个好方法,解决了我的问题。但只是出于好奇,没有其他更简单的方法吗? @MohammadSiavashi 可能有一种更简单的方法,但它可能与上述基本相同。基本上,将某些东西附加到状态或道具,并根据该值隐藏或显示。【参考方案2】:

建议您查看 react-native-router-flux 包。

在github上@https://github.com/aksonov/react-native-router-flux

在项目中布置多个视图的强大方法。

例如,我的应用程序的渲染如下。它通过 react-native-router-flux 支持多个视图(描述为场景)。组件属性只是您从 React.Component 派生的类。

import Scene, Router, TabBar, Modal, Schema, Actions, Reducer from 'react-native-router-flux'

  render() 
       return <Router createReducer=reducerCreate sceneStyle=backgroundColor:'#F7F7F7'>
           <Scene key="modal" component=Modal >
               <Scene key="root" hideNavBar=true>
                   /*<Scene key="register" component=Register title="Register"/>
                   <Scene key="register2" component=Register title="Register2" duration=1/>
                   <Scene key="home" component=Home title="Replace" type="replace"/>*/
                   <Scene key="launch" initial=true>
                    <Scene key="launch1" component=Launch  hideNavBar=true  style=flex:1, backgroundColor:'transparent'/>
                        <Scene key="privacy" type="push" component=DisplayTextFile title="Privacy"
                          textFile=DisplayTextFile.PRIVACY style=flex:1, backgroundColor:'transparent'/>
                        <Scene key="terms" type="push" component=DisplayTextFile title="Terms Of Service"
                            textFile=DisplayTextFile.TERMS style=flex:1, backgroundColor:'transparent'/>
                        <Scene key="login" type="push"  hideNavBar=true  component=Login style=flex:1, backgroundColor:'transparent'/>
                        <Scene key="forgotPassword" type="push"  hideNavBar=true  component=ForgotPassword style=flex:1, backgroundColor:'transparent'/>
                        <Scene key="pleaseWait" component=WaitWindow/>
                    </Scene>
                   <Scene key="pleaseWait" component=WaitWindow panHandlers=null />
                   <Scene key="tabbar" tabs=true default="feed"  panHandlers=null  >
                       <Scene key="feed" component=FeedScreen mainfeed=true title="Feed" hideNavBar=true icon=TabIcon/>
                       <Scene key="discover" component=Discover title="Discover" icon=TabIcon/>
                       <Scene key="messages" component=Messages title="Messages"  hideNavBar=true  icon=TabIcon/>
                       <Scene key="dashboard" component=Dashboard title="Profile" hideNavBar=true icon=TabIcon/>
                       /*<Scene key="tab4" component=TabView title="Tab #4" hideNavBar=true icon=TabIcon/>
                       <Scene key="tab5" component=TabView title="Tab #5" icon=TabIcon />*/
                   </Scene>
               </Scene>
               <Scene key="waitWindow" component=WaitWindow panHandlers=null />
           </Scene>
       </Router>;
   

【讨论】:

以上是关于React Native:如何更改 onPress 事件的视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在 react-native 的 onPress 按钮上滚动底部?

React Native:onPress:如何切换按钮文本和函数调用?

如何在 react-native 中的 onPress 按钮上滚动顶部?

如何测试 React Native “Pressable” onPress 函数

如何通过 React Native 中的视图传递触摸但触发 onPress?

如何让 onPress 在 TextInput 内的 React Native Text 元素上触发?