繁体   English   中英

在 React-native 中从另一个组件更改一个组件的状态

[英]Changing the state of one component from another component in React-native

我有下面的代码,我希望实现的是从TabNavigator中的屏幕之一更改Tabscreen的状态。 但是我目前尝试这样做的方式,使用全局函数来设置状态,根本不起作用,错误undefined is not a function (evaluating 'this.setstate')

import React from 'react';
import {Image, Text, TouchableNativeFeedback, TouchableHighlight} from 'react-native';
import {TabNavigator} from 'react-navigation';
import {Container, Header, Icon, Left, Body} from 'native-base';
import Timeline from './Timeline';

const Mainscreen=TabNavigator(
  {
      Main:{
        screen: Timeline,
        navigationOptions:{
          tabBarIcon: ({tintColor}) => <Icon name='home' style={{color:tintColor}}/>
        }
      },
      Search:{
        screen: props => <Container><TouchableHighlight onPress={()=>globalStateUpdate()}><Container style={{backgroundColor:'rgba(0,132,180,0.5)'}}></Container></TouchableHighlight></Container>,
        navigationOptions:{
          tabBarIcon: ({tintColor}) => <Icon name='search' style={{color:tintColor}}/>
        }
      },
  }
);

function globalStateUpdate(){
  this.setState({
    header:<Text>Search</Text>
  });
}

class Tabscreen extends React.Component {
  constructor(props){
    super(props);
    this.state={
      header:<Text>Home</Text>
    };
    globalStateUpdate = globalStateUpdate.bind(this);
  }

  render() {
    return (
      <Container>
        <Header hasTabs >
          <Left>
            {this.state.header}
          </Left>
          <Body/>
        </Header>
        <Mainscreen/>
      </Container>
    );
  }
}

export default Tabscreen;

我怎样才能做到这一点? React-navigation 对我的应用程序非常重要,我无法删除它。 我相信 Redux 可以解决这个问题,但仅对文本进行一次更改似乎过于复杂,而这正是我所需要的。

您可以将函数从TabScreen到其他屏幕以更新TabScreen状态。

const Mainscreen=TabNavigator(
    {
        Main:{
            screen: Timeline,
            navigationOptions:{
                tabBarIcon: ({tintColor}) => <Icon name='home' style={{color:tintColor}}/>
            }
        },
        Search:{
            screen: props => <Container><TouchableHighlight onPress={()=> props.screenProps.globalStateUpdate({header:<Text>Search</Text>})}><Container style={{backgroundColor:'rgba(0,132,180,0.5)'}}></Container></TouchableHighlight></Container>,
            navigationOptions:{
                tabBarIcon: ({tintColor}) => <Icon name='search' style={{color:tintColor}}/>
            }
        },
    }
);


class Tabscreen extends React.Component {
    constructor(props){
        super(props);
        this.state={
            header:<Text>Home</Text>
            globalStateUpdate: newState => this.setState(newState)
        };
    }

    render() {
        return (
            <Container>
                <Header hasTabs >
                    <Left>
                        {this.state.header}
                    </Left>
                    <Body/>
                </Header>
                <Mainscreen screenProps={{globalStateUpdate: this.state.globalStateUpdate}} />
            </Container>
        );
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM