大家好我还是新手做出反应,我不知道,如何使用全局变量。 我想让“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,
};
答案 0 :(得分:7)
这是一个糟糕的主意,但在React中使用全局变量的最佳/最简单的方法是将它放在window
上。在组件中,您可以执行window.topicText="some text"
之类的操作,然后通过window.topicText
在其他任何位置访问它。
理想情况下,如果您有数据,并且在您的情况下可能处于状态,您需要在组件之间保持不变,那么您应该查看Redux或Flux之类的内容。我更喜欢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);
}