React.js组件化开发第二步(添加样式及数据请求)

第一步主要说了一下框架的搭建及组件与路由的创建;

接下来主要是样式的添加及从后台获取数据:

添加样式美化页面

  • 化美化一下我们的公共组件: 在 /src/components/Common/ 目录下添加 NavBar.css:

    .nav-bar {
      margin-top: 0;
      margin-bottom: 0;
      padding-left: 0;
      list-style: none;
      display: flex;
      text-align: center;
      background-color: #fff;
      border-bottom: 1px solid #e5e5e5;
    }
    .nav-bar li {
      flex: 1;
      border-right: 1px solid #e5e5e5;
    }
    .nav-bar a {
      display: block;
      color: #333;
      padding: 10px;
      text-decoration: none;
    }
    .nav-bar .source {
      font-size: 12px;
      padding: 10px;
      border-right: 0 none;
    }
  • 样式要应用,当然还必须得在组件中引用才行的哟,修改/src/components/Common/NavBar.js:

    import React from 'react';
    import {
      Link,} from 'react-router-dom';
    import './NavBar.css';
    
    const NavBar = (props) => (
      <ul className="nav-bar">
        <li><Link to="/">Home</Link></li>
        <li><Link to="/about">About</Link></li>
        <li><Link to="/list">List</Link></li>
        <li className="source">来源于: {props.title}</li>
      </ul>
    );
    
    export default NavBar;
  • 当然,也可以开添加一些公共样式,这样在每个组件内都可以使用,修改/src/index.css:

    body {
      margin: 0;
      padding: 0;
      font-family: sans-serif;
      background-color: #f5f5f5;
    }
    .content {
      margin: 0;
      padding: 20px;
      font-size: 18px;
      background-color: #fff;
      border-bottom: 1px solid #e5e5e5;
    }

    因为 index.cssindex.js 中引入了,我们在其他组件中不用引用,直接使用就好啦,修改关于组件/src/components/About/About.js:

    import React from 'react';
    import NavBar from '../Common/NavBar';
    
    const About = () => (
      <div>
        <NavBar title="关于页" />
        <h1 className="content">这是关于页</h1>
      </div>
    );
    
    export default About;

    其他组件的修改也是一样的,即在组件中给 className 贬值为样式名即可;

    现在命令行切到项目根目录,执行yarn run start启动项目,在浏览器内查看添加样式后的效果;

从服务端获取数据

  • 这里使用的 axios获取数据,先安装包:

    $ yarn add axios
  • 下面的实例演示一下

  • src目录内创建一个service的目录,并创建一个 Connect.js文件:

    import React,{ Component } from 'react';
    import axios from 'axios';
    
    
    const Connect = (MyComponent) => {
      return class extends Component {
        constructor(props) {
          super(props);
          this.state = {
            data: [],};
        }
    
        componentDidMount() {
          axios.get('http://rapapi.org/mockjsdata/23242/v1/question/page')
            .then(res => res.data)
            .then(data => {
              this.setState({
                data: data.data.recordList
              });
            })
          
        }
    
        render() {
          return <MyComponent { ...this.props } data={this.state.data} />
        }
      }
    }
    
    export {
      Connect,}
  • 修改列表组件/src/components/List/List.js:

    import React from 'react';
    import NavBar from '../Common/NavBar';
    import { Connect } from '../../service/Connect';
    import './List.css';
    
    const List = (props) => {
      return (
        <div>
          <NavBar title="列表页" />
          <ul className="content list">
            {
              props.data && props.data.length > 0 &&
              props.data.map((item,index) => (
                <li key={index}>
                  <strong>名称: </strong>
                  <span>{ item.answer }</span>
                  <time>{ item.createTime }</time>
                </li>
              ))
            }
          </ul>
        </div>
      );
    };
    
    export default Connect(List);
  • 现在命令行切到项目根目录,执行 yarn run start 启动项目,浏览器内查看 列表 组件,是不是从服务端获取的数据了;

最后

现在跟据这些所掌握的内容,就可以开始的一个完整的 React.js 项目了。源码

相关文章

一、前言 在组件方面react和Vue一样的,核心思想玩的就是组件...
前言: 前段时间学习完react后,刚好就接到公司一个react项目...
前言: 最近收到组长通知我们项目组后面新开的项目准备统一技...
react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom...