javascript - 我的组件如何在不重复代码的情况下在另一个组件中工作?
问题描述
如何让我的组件在另一个组件中工作而不重复代码?
换句话说,在NextPage.js
文件里面,<LogoutButton/>
组件不会执行它的功能吗?我希望<LogoutButton/>
它执行与组件内部完全相同的功能<Home/>
。
有没有办法做到这一点,而无需制作NextPage.js
基于类的组件并在NextPage.js
组件内重复相同的逻辑?
这是Home.js
文件:
import React, {Component} from 'react';
import fire from '../../config/Fire';
import classes from './Home.css';
import Aux from '../../hoc/Aux';
import NextPage from '../../components/nextpage/NextPage';
import LogoutButton from '../../UI/buttons/LogoutButton';
class Home extends Component {
state = {
flag: false
}
logout() {
fire.auth().signOut();
}
goToNextPage() {
this.setState({flag: true});
}
render() {
const flag = this.state.flag;
if(flag) {
return <NextPage/>;
}
return (
<Aux>
<button
type="button"
className="btn btn-outline-primary btn-lg btn-block"
onClick={this.goToNextPage.bind(this)}>some button
</button>
<LogoutButton clicked={this.logout.bind(this)}/>
<NextPage/>
</Aux>
);
}
}
export default Home;
这是NextPage.js
文件:
import React from 'react';
import Aux from '../../hoc/Aux';
import LogoutButton from '../../UI/buttons/LogoutButton';
const nextPage = () => {
return(
<Aux>
<LogoutButton/>
</Aux>
);
}
export default nextPage;
这是LogoutButton.js
文件:
import React from 'react';
import classes from '../../UI/buttons/LogoutButton.css';
import Aux from '../../hoc/Aux';
const logoutButton = (props) => (
<Aux>
<button
className={classes.LogoutButton}
onClick={props.clicked}>Logout
</button>
</Aux>
);
export default logoutButton;
解决方案
您可以将注销逻辑移动到注销按钮组件中。当您的注销逻辑变得复杂时,函数处理程序会更好。
import React from 'react';
import classes from '../../UI/buttons/LogoutButton.css';
import Aux from '../../hoc/Aux';
import fire from '../../config/Fire';
const handleLogout = () => {
fire.auth().signOut();
}
const logoutButton = (props) => (
<Aux>
<button
className={classes.LogoutButton}
onClick={handleLogout}
>
Logout
</button>
</Aux>
);
export default logoutButton;
推荐阅读
- java - Liquibase 格式化的 sql 自动生成的 id
- javascript - Axios:在单独的文件中使用 baseUrl 会导致在 axios 请求标头中设置身份验证令牌时出现问题
- typescript - 将自定义本地类型添加到由 TypeScript 编译器生成的输出声明
- sql-server - 在 VBA 中处理数十万 SQL Server 行
- azure-devops - YAML 管道模板参数语法
- mysql - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 TYPE AS ENUM 附近使用正确的语法
- docker - 程序干净退出,但 kubernetes 处于 CrashLoopBackOff 中
- c++ - 以字符串 str 作为输入。编写一个代码,将字符串中的所有“x”移动到其末尾。打印返回的值
- vue.js - 如何将 cookie 从 vuejs 发送到 lumen
- javascript - 为什么使用 QR 码阅读器时 Jquery Mask 插件会改变结果