React Native - 不同JS文件之间的setState

时间:2017-10-19 08:38:59

标签: javascript reactjs react-native

我想从A组件到B组件ABB是不同的JS文件。我尝试将A导入B并访问B内的功能。还要使this中的函数变为静态,然后才发现静态函数没有实例,所以我无法访问静态中的import B from '../B'; class A extends React.Component { ChangeBContent(){ B.SetContent(); } render(){ return( <View> <SpeicalBtn onPress={()=> this.ChangeBContent()}/> </View> ); } } module.exports = A; AppRegistry.registerComponent('myApp', () => A);

A.js

class B extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            content:''
        }
    }

    SetContent(){
        this.setState({content:'123'});
    }

    render(){
        return(
            <View>
              <Text>{this.state.content}</Text>
            </View>
        );
    }
}

module.exports = B;
AppRegistry.registerComponent('myApp', () => B);

B.js

{{1}}

2 个答案:

答案 0 :(得分:3)

你可以做肮脏的伎俩,但我认为你需要更清洁的方法。

这是您使用状态管理库(例如redux)的地方,您有一个全局存储,并且您可以分派操作。您可以查看此stackoverflow post

答案 1 :(得分:1)

您应该将它们包装到另一个容器组件中。

ContentC.js

    class ContentC extends React.Component {
      constructor(props) {
        super(props);
        this.state = {
            contentA:'',
            contentB: ''
        }
    }
    SetContentA(){
        this.setState({contentA:'123'});
    }
    SetContentB(){
        this.setState({contentB:'123'});
    }
    render(){
      return(
         <ClassA content={this.state.contentA} />
          <ClassB content={this.state.contentB}/>
        );
      }
    }

现在,您可以使用props.contentAprops.contentB

的内容