React.js組件化開發第二步(添加樣式及數據請求)

第一步主要說了一下框架的搭建及組件與路由的建立;css

接下來主要是樣式的添加及從後臺獲取數據:react

添加樣式美化頁面

  • 化美化一下咱們的公共組件: 在 /src/components/Common/ 目錄下添加 NavBar.css:ios

    .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:git

    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:github

    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:axios

    import React from 'react';
    import NavBar from '../Common/NavBar';
    
    const About = () => (
      <div>
        <NavBar title="關於頁" />
        <h1 className="content">這是關於頁</h1>
      </div>
    );
    
    export default About;

    其餘組件的修改也是同樣的, 即在組件中給 className 貶值爲樣式名便可;segmentfault

    如今命令行切到項目根目錄, 執行yarn run start啓動項目, 在瀏覽器內查看添加樣式後的效果;api

從服務端獲取數據

  • 這裏使用的 axios來獲取數據, 先安裝包:瀏覽器

    $ yarn add axios
  • 下面的實例演示一下react-router

  • 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 項目了。源碼

相關文章
相關標籤/搜索