反应的全局变量

时间:2017-07-13 12:00:57

标签: javascript reactjs global-variables

大家好我还是新手做出反应,我不知道,如何使用全局变量。 我想让“this.props.topic.text”成为一个全局变量,以便在我项目的其他应用程序中使用它。我怎么能这样做?

export default class Topic extends Component {

  deleteThisTopic() {
    Topics.remove(this.props.topic._id);
  }

  test() {
  
  }
  render() {
    return (

      <Router>
    <div>
      <ul>
        <Link to="/sub"><li onClick={this.test.bind(this)}>{this.props.topic.text}  ARN:  {this.props.topic.arn}</li></Link>
        <Link to="/log"><button onClick={this.test.bind(this)}>S'inscrire</button></Link>
        <Link to="/"><button >Cacher</button></Link>
        <button onClick={this.deleteThisTopic.bind(this)}>Suprimer</button>
      </ul>

      <hr/>
      <Route exact path="/log" component={AppInscription}/>
      <Route exact path="/sub" component={AppSub}/>


    </div>
  </Router>
  );
  }
}

Topic.propTypes = {

  topic: PropTypes.object.isRequired,
};

4 个答案:

答案 0 :(得分:7)

这是一个糟糕的主意,但在React中使用全局变量的最佳/最简单的方法是将它放在window上。在组件中,您可以执行window.topicText="some text"之类的操作,然后通过window.topicText在其他任何位置访问它。

理想情况下,如果您有数据,并且在您的情况下可能处于状态,您需要在组件之间保持不变,那么您应该查看ReduxFlux之类的内容。我更喜欢Redux。

答案 1 :(得分:1)

你可以试试这个: 在主要组件App.js之前声明您的全局变量,并将此变量作为树下的props传递。

Parent.js

getCalendarEvents(): Observable<UserEvents[]> {
  return this.http.get<UserEvents[]>(this.apiUrl + '/user_events')
    .map(res => res.json()).catch(err => this.handleError());
}

child.js

var myVar = {}

class MyComponent extends Component {

...
...
myVar = new Object();
...
...
render() {
   return <div>
                 \\ children
                 <MyLeftBranch myVar={myVar} />
                 <MyRightBranch myVar={myVar} />
              </div>
}
}

export default MyComponent;

答案 2 :(得分:1)

TypeScript + globalThis

//@ts-ignore TODO cleanup this debug output
globalThis.MY_NAMESPACED_NAME = { something: 'to inspect in the console' }

对生产代码来说是个坏主意,但对调试很有用。

答案 3 :(得分:0)

App.js

// Since this.state is global from parent to child components
// This was the easiest solution I've found:

import React, { Component } from "react";
import firebase from "../config";

class App extends Component
 constructor(props) {
     super(props);

     // Set the key to the reference name
     // Assign value to firebase DB collection

     this.state = {
         roomsRef: firebase.firestore().collection("rooms")
     }
}

// reference it anywhere in the component:

componentDidMount() {
    this.getDb(this.state.roomsRef);
}