react学习前一部分

引入   
 "braft-editor": "^2.3.9",
headmenu.js
import './headmenu.css'
import React, { useState }  from 'react';
import {HashRouter, Redirect ,Route, Switch,Link} from 'react-router-dom';
import { withRouter } from 'react-router-dom';

import BottomMenu from './bottommenu'

import AList from './alist'
import Add from '../views/add'

import Article from '../views/article'

const items = ["first","second","third"];

 function Home()  {
    return (
        <div>
            <a>去detail</a>
        </div>
    );
}

function Detail(){

    return (
        <div>
          <a>回到home</a>
        </div>
    );
}

let gActives = []
let gSetActives = []

function setIndexActive(index){
  //if()
  for(let i=0;i<gSetActives.length;i++){
    if(index == i){
      gSetActives[i](1)
    }else{
      gSetActives[i](0)
    }
  }
}

let MenuItem = (props) => {
  const [active, setActive] = useState(0);
  gSetActives[props.index] = setActive;
  gActives[props.index] = active;
  let myIndex = props.index;
  return(
    <li  className={active ==1?'liActive':'' }  onClick={()=>{ setIndexActive(props.index) }} > <a href={props.href}>{props.name}</a> </li>
  )
};



function Mainpage(){
  return(
    <div>
      <div className="headmenu">
        <ul >  
            <MenuItem href="#/bottom/home/list" name="home" index="0" />
            <MenuItem href="#/bottom/home/list" name="list" index="1" />
            <MenuItem href="#/bottom/home/third" name="third" index="2" />
        </ul>
      </div>
      <Route exact path="/bottom/home/list" component={AList}/>
      <Route exact path="/bottom/home/third" component={Detail}/>
      
    </div>
  )
}


function BottomPage(){
  return(
    <div>
        <Route  path="/bottom/home" component={Mainpage}/>
        <Route exact path="/bottom/my" component={Add}/>
        <BottomMenu />
    </div>
  )
}

const BasicRoute = (props) => (
  <HashRouter>
      <Switch>
         
          <Route  path="/bottom/" component={BottomPage}/>
          <Route exact path="/article" component={Article} />
      </Switch>
  
  </HashRouter>
);
//  
export default BasicRoute;
headmenu.less
.headmenu{
  ul{
        margin-top: 0;
        display: flex;   
        //width: 200px;
        padding-left: 20px;
        border-bottom: 1px solid #00965e;
    }

    li{
        flex: 0 0 70px;
        text-align: center;
        line-height: 50px;
        list-style: none;
        font-weight: 700!important;
        font-size: 1rem;
        justify-content:flex-start;
    }

    .liActive a {
        color: #00965e;
    }

    a:link, .navbar a:active, .navbar a:visited {
        color: #666;
        text-decoration: none;
    }
}

bottommenu.js

import './bottommenu.css'
import React, { useState }  from 'react';

let gActives = []
let gSetActives = []

function setIndexActive(index){
  //if()
  for(let i=0;i<gSetActives.length;i++){
    if(index == i){
      gSetActives[i](1)
    }else{
      gSetActives[i](0)
    }
  }
}

let MenuItem = (props) => {
  const [active, setActive] = useState(0);
  gSetActives[props.index] = setActive;
  gActives[props.index] = active;
  let myIndex = props.index;
  return(
    <li  className={active ==1?'liActive':'' }  onClick={()=>{ setIndexActive(props.index) }} > <a href={props.href}>{props.name}</a> </li>
  )
};

function BottomMenu (props)  {
    return(
        <div className="bottommenu">
            <ul>  
                <MenuItem href="#/bottom/home/list" name="主页" index="0" />
                <MenuItem href="#/bottom/my" name="我的" index="0" />
            </ul>
        </div>
    )
}

export default BottomMenu;

bottommenu.less

ul {
    display: block;
    list-style-type: disc;
    margin-block-start: 0em;
    margin-block-end: 0em;
    margin-inline-start: 0px;
    margin-inline-end: 0px;
    padding-inline-start: 0px;
}
.bottommenu{
    ul{
        margin-top: 0;
        margin-bottom: 0;
        display: flex; 
        justify-content:space-between;  
        //width: 200px;

        border-top: 1px solid #00965e;
        position:absolute;bottom:0;width:100%;
    }

    li{
        flex: 0 0 80px;
        text-align: center;
        line-height: 40px;
        list-style: none;
        padding-left: 20px;
        padding-right: 20px;
        font-size: 0.71rem;
        justify-content:flex-start;
    }

    .liActive a {
        color: #00965e;
    }

    a:link, .navbar a:active, .navbar a:visited {
        color: #666;
        text-decoration: none;
    }
}

alist.js

import './alist.css';

const gItem = {
    title:'VSCode launch.json配置详细教程',
    content:'主要介绍了vscode 的node.js debugger 的 launch.json 配置详情,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一',
    time:'5月6日',
    size:'36mb',
    type:'pdf'
  }
  
  function AirticleItem(props){
      return (
          <div className="AirticleItem">
              <div>   
                <h5>{props.item.title}</h5>
              </div>
              <p>
                {props.item.content}
              </p>
              <div>
                <span>{props.item.time}</span>
                <span>{props.item.size}</span>
                <span>{props.item.type}</span>
              </div> 
          </div>
      );
  }

function AList(props){
    return (
        <div>
        <AirticleItem  item = {gItem}/>
        <AirticleItem  item = {gItem}/>
        <AirticleItem  item = {gItem}/>
        </div>
    )
}

export default AList;

alist.less

.AirticleItem{
    margin-left: 10px;
    margin-top: 10px;
    border-bottom: 1px solid #f0f0f0;
    h5{
        margin-top: 5px;
        margin-bottom: 5px;
        display: inline-block;
    }

    span{
        min-width: 50px;
        display: inline-block;
        color: #6c757d !important;
        font-size: 0.6rem;
    }
    p{
        margin-top: 0px;
        margin-bottom: 5px;
        color: #6c757d !important;
        font-size: 0.8rem;
        overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
    }
}

add.js

import './add.css'

import MyEditor from './editordemo'

function add(){
    return(
        <div className="add">
            <div className="head"> 
                <label>返回</label>
                <label><b>添加文章</b></label>
                <label>确定</label>
            </div> 
            <li>
                <label>标题</label>
                <input type="text" name="title" />
            </li>
            <li>
                <label>类型</label>
                <select id="select-main">       
                    <option>Hello</option>
                    <option>HTML5</option>
                </select>
            </li>
            <li>
                <div id="myeditor1">
                     <MyEditor />
                </div>

            </li>
        </div>
    ) 
}

export default add;

add.less

.add{
    font-size: 0.9rem;
    .head{
        border-bottom: 1px solid #00965e;
        padding-bottom: 10px;
        margin-bottom: 20px;
        display:flex;
        justify-content:space-between;  
        label{
            display: inline-block;
            margin: 7px;
        }
    }
    li{
        margin-top: 1.5rem;
        padding-left: 0.5rem;
        label{
            display: inline-block;
            width: 20%;
        }
        input{
            width: 70%;
        }
        select{
            width: 73%;
            height: 1.4rem;
        }
        #myeditor1{
            margin-top: 1.5rem;
            border-top: solid 1px #aaa;
        }
 
    }
    
}

article.js

import './article.css'
const item = {
    title:'VSCode launch.json配置详细教程',
    content:'主要介绍了vscode 的node.js debugger 的 launch.json 配置详情,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一',
    time:'5月6日',
    size:'36mb',
    type:'pdf'
  }

function Article(props){
    return(
        <div className="article">
            <h5>{props.allp.title}</h5>
            <p>{props.allp.content}</p>
            <div>
                <span>{props.allp.time}</span>
                <span>{props.allp.size}</span>
                <span>{props.allp.type}</span>
            </div> 

            <div className="comment">
                <input type="text" name="title" /> <label> 评论</label>
            </div>
        </div>
    )
}

function myArticle(){
    return(
        <Article  allp={item} />
    )
}


export default myArticle;

article.less

.article{

    span{
        min-width: 50px;
        display: inline-block;
        color: #6c757d !important;
        font-size: 0.6rem;
    } 
    .comment{
        position:absolute;bottom:0;width:100%;
        display: flex;
    }
    input{
        width: 70%;
        margin-left: 2%;
        margin-bottom: 5px;
  
    }
    label{
        margin-left: 20px;
        font-size: 0.8rem;
    }


}

editordemo.js

import 'braft-editor/dist/index.css'
import React from 'react'
import BraftEditor from 'braft-editor'

export default class CustomDemo extends React.Component {

  render () {

    const controls = [
      {
        key: 'bold',
        text: <b>加粗</b>
      },
      'italic', 'underline', 'separator', 'link', 'separator', 'media'
    ]

    return (
      <div className="editor-wrapper">
        <BraftEditor
          controls={controls}
          contentStyle={{height: 210, boxShadow: 'inset 0 1px 3px rgba(0,0,0,.1)'}}
        />
      </div>
    )

  }

}

 

 
posted @ 2021-05-14 18:30  cnchengv  阅读(50)  评论(0编辑  收藏  举报