javascript – 如何让不相关的组件影响主App状态?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 如何让不相关的组件影响主App状态?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2636字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 如何让不相关的组件影响主App状态?](/upload/InfoBanner/zyjiaocheng/774/29ef98fcd116495fa4af8dc86177d77d.jpg)
我有一个< Navbar />我的< App />中渲染顶部的组件组件,在Navbar中有一个指向某个登录页面的链接,这由路由器处理.如果我无法传递它,那么我怎样才能将状态从Login.js中所做的更改中提升为传统方式,例如< Login loginHandler = {this.loginHandler} /> ?
有人告诉我,我应该将函数抽象为一个单独的模块,并在两个组件之间共享它,但是我太多的反应初学者,我需要一些例子.
谢谢
这是回购:https://github.com/charlesdarkwind/vitae-eternam
添加组件:
基本上登录方法是authHandler和authenticate,现在它只是设置用户ID(uid)的状态我希望是全局的
App.js:
import React from 'react';
import NavbarTop from './NavbarTop';
class App extends React.Component {
constructor() {
super();
this.authenticate = this.authenticate.bind(this);
this.authHandler = this.authHandler.bind(this);
}
state = {
items: {},
order: {},
uid: null
};
render() {
return (
<div>
<NavbarTop />
</div>
);
}
}
export default App;
Login.js:
import React from 'react';
import { Button } from 'react-bootstrap';
import base from '../base';
import NavbarTop from './NavbarTop';
class Login extends React.Component {
componentDidMount() {
base.onAuth((user) => {
if(user) {
this.authHandler(null, { user });
}
});
}
authenticate(provider) {
console.log(`Tentative de connexion avec ${provider}`);
base.authWithOAuthPopup(provider, this.authHandler);
}
authHandler(err, authData) {
console.log(err, authData);
if(err) {
console.error(err);
return;
}
// grab the cart/order info
const orderRef = base.database().ref(this.props.uid); //NEED SOME ID REFERING TO CURRENT ORDER CART
// query the firebase ref once for the cart data and set the state
orderRef.once('value', (snapshot) => {
const data = snapshot.val() || {};
this.setState({
uid: authData.user.uid
});
});
}
render() {
return (
<div>
<NavbarTop />
<div className="loginWrap">
<nav className="login">
<p>Connexion</p>
<Button bsStyle="primary" className="facebook" onClick={() => this.props.authenticate('facebook')}>Connexion avec FaceBook</Button>
<Button bsStyle="danger" className="google" onClick={() => this.props.authenticate('google')}>Connexion avec Google</Button>
</nav>
</div>
</div>
)
}
}
export default Login;
解决方法:
如果您在没有任何状态管理库的情况下使用react,那么props是传递数据的唯一方法.实际上要更准确,这是传递数据的唯一正确方法,从技术上讲,你可以通过将数据附加到窗口对象以使其全局或使用localStorage来解决这个问题.我会远离窗口对象,但localStorage是可行的选项.
话虽这么说,你应该开始研究像redux和MobX这样的状态管理库.它们被用于这个原因,让你的应用程序成为跨组件实现持久数据和数据可访问性的更好方法.
如果您只需要跟踪用户是否已登录,那么您可以使用localStorage,但是如果您开始遇到与应用程序其他部分相同的问题并且需要使越来越多的数据持久/全局,那么你应该使用一个状态管理库.
内容总结
以上是互联网集市为您收集整理的javascript – 如何让不相关的组件影响主App状态?全部内容,希望文章能够帮你解决javascript – 如何让不相关的组件影响主App状态?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。