javascript - 如果我以这种方式编程,我是否有更多的概述?

标签 javascript reactjs

我开始学习 Reactjs,我想知道最佳实践。我有以下页面: -家 -BMI计算器 -等等

我的问题是,我的所有逻辑(即“calculateBmi”)都应该在我的 Bmi.js 中吗?还是应该将它们放在我的 App.js 文件中?

这方面的最佳做法是什么?因为当我制作更多小项目时,App.js 文件将包含许多不同的功能。

我认为最好的做法是将所有功能放在 Bmi.js 中。但你的意见是什么?我刚开始学习 Reactjs。

App.js

import React, { Component } from 'react';
import { BrowserRouter as Router, Route } from 'react-router-dom';
import './App.css';
import Header from './components/layout/Header';
import Homepage from './components/Homepage';

import Bmi from './components/bmiCalculator/Bmi';
import CalculateBmi from './components/bmiCalculator/CalculateBmi';


class App extends Component {

  calculateBmi = (length, weight) => {

    const lengthInMeters = length / 100;
    const bmi = weight / (lengthInMeters * lengthInMeters);

    console.log(bmi);
  }

  render() {
    return (
      <Router>
        <div className="App">
          <Header />
          <Route exact path="/" render={props => (
            <React.Fragment>
              <Homepage />
            </React.Fragment>
          )} />

          <Route path="/bmicalculator" render={props => (
            <React.Fragment>
              <Bmi calculateBmi={this.calculateBmi} />
            </React.Fragment>
          )} />
        </div>
      </Router>

    );
  }
}


export default App;

Bmi.js

import React, { Component } from 'react';

export class Bmi extends Component {

    state = {
        length: '',
        weight: ''
    }

    onSubmit = (e) => {
        e.preventDefault();
        this.props.calculateBmi(this.state.length, this.state.weight);
        this.setState({ length: '' });

    }

    onChange = (e) => this.setState({ [e.target.name]: e.target.value });

    render() {
        return (
            <div className="bmiborder">
                <h1 style={titleStyle}>BMI Healthy Weight Calculator</h1>
                <div style={resultStyle} className="bmiResultContainer">
                    <p>Body Mass Index(BMI) = 20.9</p>
                    <p>Normal weight</p>
                </div>
                <form onSubmit={this.onSubmit}>
                    <div className="background">
                        <div className="inputGroup">
                            Length (cm)<input type="number" name="length" placeholder="180" value={this.state.length} onChange={this.onChange}></input>
                        </div>
                    </div>
                    <div className="background">
                        <div className="inputGroup">
                            Weight (kg)<input type="number" name="weight" placeholder="75" value={this.state.weight} onChange={this.onChange}  ></input>
                        </div>
                    </div>
                    <div className="background">
                        <div className="inputGroup">
                            <input type="submit" value="Calculate" style={buttonStyle}></input>
                        </div>
                    </div>
                </form>
            </div >

        )
    }

}



const titleStyle = {
    color: "White"
}

const resultStyle = {
    margin: "0",
    padding: "0"
}

const buttonStyle = {
    backgroundColor: "#ff4081",
    color: "white",
    border: "none",
    width: "150px",
    height: "36px",
    borderRadius: "3px",
    cursor: "pointer",
}

export default Bmi;

最佳答案

你的方法应该放在尽可能低的位置,即在它们真正关心的组件中,即在这种情况下在 Bmi.js 中

此外,我会考虑将域逻辑和表示(具有相应的域和 ui 存储)分开,这样您最终会得到一个可以重用于 Web 和移动版本的架构。

关于javascript - 如果我以这种方式编程,我是否有更多的概述?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56772207/

相关文章:

javascript - 使函数成为路由中的快速中间件

javascript - 如何使用javascript删除http header 引用信息(由浏览器保存)?

javascript - Highcharts 将变量数组添加到系列中

reactjs - 如何在 auth0-js 中刷新后保持用户登录状态?

reactjs - 使用 Material-UI 切换过滤器列表

javascript - JSON 显示基于 ID 的实际数据

javascript - 如何从 api 获取信息并将其显示在 DOM 上?

javascript - 当所有嵌套转换完成时,有没有办法捕获事件

javascript - 使用 Enzyme 测试组合的 Reactjs 组件

javascript - 将 React 中的函数从组件移动到引用库