【打工日记】React drilldown

老板的要求:世界地图显示流行病数据,点击某个省进入钻取,获得这个省的下层数据

           问题:老板现在所有的都写死了,并不是点击了某个省,然后获得这个省的标记,再获得这个省的数据

 

需要学的技术

  Highmaps的driildown----https://www.cnblogs.com/DaBing0806/p/5080211.html

  react/umi的运行流程、数据获取过程,如何进行增删改查

  通过react进行的动态数据变化

  react的运行状态下的函数内容

 

1. React基础语法

//React虚拟dom
//ReactDOM.render()
//React.createElment()
//React.Component

class HelloMessage extends React.component{
    render(){//获得组件,进行渲染
        return (
            <div>
                <Hello>this.props.name</Hello>
            </div>
        )
    }
}
//加载主键
ReactDOM.render(
    <HelloMessage name="Taylor" />,
    document.getElementById("hello-example")
)

2.jsx

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>React Document</title>
    <!--引入框架库-->
    <script src="https://unpkg.com/react@16/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
    <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
    <style>
        .red{
            color:red;
        }
    </style>
</head>
<!--  1. 分大块 2.分区编写,渲染进大块里面-->
<body>
    <div id="app"></div>
    <script type="text/babel">
    /*
       var hello= React.createElement('h1',{
           classname:'red',
           name:"Season"
       },"HelloWorld");//hello是要渲染的标签
      */
       
       var time=new Date().toLocaleTimeString();
       var ele= <div><h1 className="red" name="jack">Hello,jack</h1>
                    <h2>{time}</h2>
        </div>;
        ReactDOM.render(ele
        ,document.getElementById('app'));

    </script>
</body>
</html>

  

3.函数调用

 <script type="text/babel">
  
       function tick() {  
       var time=new Date().toLocaleTimeString();
       var ele= <div><h1 className="red" name="jack">Hello,jack</h1>
                    <h2>{time}</h2>
        </div>;
 
        ReactDOM.render(ele
        ,document.getElementById('app'));
        
    }
    setInterval(tick,1000);
    </script>
<script type="text/babel">
 
        function Mello() {
            return <h1>hello,Season</h1>;
        }

    
    ReactDOM.render(<Mello/>
        ,document.getElementById('app'));
    </script>

  函数名一定要大写

  传递参数

 function Mello(props) {
            return<div>
             <h1>hello,{props.name}</h1>
             <p>年龄:{props.age}</p>
             <p>擅长:{props.good}</p>
             </div>
        }
    ReactDOM.render(<Mello name="Season" age="18" good="Pingpong"/>
        ,document.getElementById('app'));

 创建标准组件


    //创建标准组件
      class HelloSeason extends React.Component{
        //带状态需要render() 有状态的用this
        render(){
            return <div>
             <h1>hello,{this.props.name}</h1>
             <p>年龄:{this.props.age}</p>
             <p>擅长:{this.props.good}</p>
             </div>
        }
      }      
 ReactDOM.render(<HelloSeason/>  //函数组件
        ,document.getElementById('app'));

 3.React的生命周期

  组件初始化、组件加载、数据更新、组件销毁

 

 <script type="text/babel">
    /*
       var hello= React.createElement('h1',{
           classname:'red',
           name:"Season"
       },"HelloWorld");//hello是要渲染的标签
      */
      /* function tick() {  
       var time=new Date().toLocaleTimeString();
       var ele= <div><h1 className="red" name="jack">Hello,jack</h1>
                    <h2>{time}</h2>
        </div>;
        }*/
        function Mello(props) {//无状态的
            return<div>
             <h1>hello,{props.name}</h1>
             <p>年龄:{props.age}</p>
             <p>擅长:{props.good}</p>
             </div>
        }

    //setInterval(tick,1000);
    //创建标准组件
      class HelloSeason extends React.Component{
          constructor(props){
              console.log('初始化阶段')
              //初始化属性props
              super(props);
              //初始化黄台
              this.state={
                  name:'jack',
                  age:30,
                  good:'inpd'
              }
          }
          componentWillMount(){
              console.log('组件加载前')
          }
          componentDidMount(){
              console.log('组件加载后')
          }
        //带状态需要render() 有状态的可以用this
        render(){
           //只要状态变化 一定会调用
           console.log('组件加载或者数据更新')
           
            return <div>
             <h1>hello,{this.state.name}</h1>
             <p>年龄:{this.state.age}</p>
             <p>擅长:{this.state.good}</p>
             </div>
        }
      }      


      ReactDOM.render(<HelloSeason /> 
  //  ReactDOM.render(<HelloSeason name="Season" age="18" good="Pingpong"/>  //函数组件
        ,document.getElementById('app'));
    </script>

 4.

<script type="text/babel">
    /*
       var hello= React.createElement('h1',{
           classname:'red',
           name:"Season"
       },"HelloWorld");//hello是要渲染的标签
      */
      /* function tick() {  
       var time=new Date().toLocaleTimeString();
       var ele= <div><h1 className="red" name="jack">Hello,jack</h1>
                    <h2>{time}</h2>
        </div>;
        }*/
        function Mello(props) {//无状态的
            return<div>
             <h1>hello,{props.name}</h1>
             <p>年龄:{props.age}</p>
             <p>擅长:{props.good}</p>
             </div>
        }

    //setInterval(tick,1000);
    //创建标准组件
      class HelloSeason extends React.Component{
          constructor(props){
              console.log('初始化阶段');
              //初始化属性props
              super(props);
              //初始化黄台
              this.state={
                  name:'jack',
                  age:30,
                  good:'inpd'
              }
          }
          componentWillMount(){
              console.log('组件加载前');
          }
          componentDidMount(){
              console.log('组件加载后');
          }

          updateUser=()=>{
            this.setState({
                name:'Tim',
                age:32
            })
          }

          shouldComponentUpdate(){
            console.log('数据是否需要更新');
              return true; //表示数据需要更新
          }
          componentWillUpdate(){
            console.log('数据将要更新');
          }
          componentDidUpdate(){
            console.log('数据已经更新');
          }
        //带状态需要render() 有状态的可以用this
        render(){
           //只要状态变化 一定会调用
           console.log('组件加载或者数据更新');
           
            return <div>
             <h1>hello,{this.state.name}</h1>
             <p>年龄:{this.state.age}</p>
             <p>擅长:{this.state.good}</p>
             <button onClick={this.updateUser}>更新数据</button>
             </div>
        }
      }      


      ReactDOM.render(<HelloSeason /> 
  //  ReactDOM.render(<HelloSeason name="Season" age="18" good="Pingpong"/>  //函数组件
        ,document.getElementById('app'));
    </script>

 5.绑定事件,加载js

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://unpkg.com/react@16/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script> 
    <!-- 引入babel -->
    <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script> 
    <script type="text/javascript" href="js/jquery-1.8.0.min.js"></script>
</head>
<body>
    <div id="app"></div>
    <script type="text/babel">
        class TodoList extends React.Component{
            state ={
                val:'',
                list:[]
            }
            handleInput =(event)=>{
                this.setState({
                  val:  event.target.value
            })
        }
            handleAdd=()=>{
                const val=this.state.val;
                const list=this.state.list;
                list.push(val);
                this.setState({list})
                }
                /*const {val,list}=this.state;*/
        
            render(){
                const arr=this.state.list;
                const val=this.state.val;
                const listItem=[];
                for (let i = 0; i < arr.length; i++) {
                     let li = <li>{arr[i]}</li>;
                    listItem.push(li);
                 }
                return <div>
                    <div>
                        <input type="text" value={val} onChange={this.handleInput}/>
                        <button onClick={this.handleAdd}>Add</button>
                        </div>
                        <ul>
                            {listItem}
                            </ul>
                       </div>
            }
        }
        ReactDOM.render(
            <TodoList/>,
            document.getElementById('app'));
        
    </script>
     
</body>
</html>

  6.AntDesign

import logo from './logo.svg';
import './App.css';
import { Input, Button,Select } from 'antd'
import 'antd/dist/antd.css'
import React from 'react';

const Search = Input.Search;
const Option = Select.Option;

class App extends React.Component {
  //初始化数据,并展示
  state = {
    val: '',
    list: []
  }

  handleChange = (event) => {//获得变化的数据,并更新
    let val = event.target.value;
    this.setState({
      val
    })
  }
  handleAdd = () => {//获得新数据
    let { val, list } = this.state;
    list.push(val);
    this.setState({
      list
    })
  }
  handleSearch = (value) => {
    //不需手动获得数据
    let { list } = this.state;
    list.push(value);
    this.setState({
      list
    })
  }
  render() {
    const { val, list } = this.state;
    const options = [];
    return <div>
      <h1>HelloWorld!</h1>
      <Input type="text" value={val} style={{ width: 300 }} onChange={this.handleChange} />
      <Button onClick={this.handleAdd}>Add</Button>
      <ul>
        {list.map((item, index) => {
          options.push(<Option key={index}>{item}</Option>)
          return <li key={index}>{item}</li>
        })}

      </ul>
      <div>
        <Search
          style={{ width: 300 }}
          onSearch={this.handleSearch}
          enterButton="Search"></Search> </div>
           <div>
        <Select style={{ width: 200 }} >
          {options}
        </Select>
      </div>
    </div>
  }
}

export default App;

  

posted @ 2021-09-16 22:38  SeasonBubble  阅读(51)  评论(0)    收藏  举报