练习

因为我在安装了一次脚手架的基础上又安装了一次脚手架,然后再创建react项目就开始有问题了。。。。
看完技术胖的视频 准备自己重新写一遍,因为这个安装的问题,几个小时没了。。。。
备份一下:

总结一下步骤就是index.js文件中是挂载
被引入index.js文件中的Xiaojiejie.js文件是组件,组件中绑定事件并指向当前上下文,并定义对应方法。
父组件向子组件传值是通过props传值,子组件向父组件传值是通过传递父组件的方法,然后子组件绑定事件的对应方法调用父组件方法。

src下
index.js

import React from 'react'
import ReactDOM from 'react-dom'
import Xiaojiejie from './Xiaojiejie'

ReactDOM.render( <Xiaojiejie />,document.getElementById('root'))

Xiaojiejie.js

import React,{Component,Fragment} from 'react'
import './index.css'
import XiaojiejieItem from './XiaojiejieItem'
import Boss from './Boss'
import axios from 'axios'
import {CSSTransition, TransitionGroup} from 'react-transition-group'

class Xiaojiejie extends Component{
    constructor(props){
        super(props)
        this.state={
            inputValue:'hh',
            list:['按摩','锤肩']
        }
    }

    componentDidMount(){
        axios.defaults.withCredentials = true
        axios.get('http://rap2api.taobao.org/app/mock/280858/example/1617624035824')
        .then((res)=>{
            console.log("获取数据成功"+JSON.stringify(res))
        })
        .catch((error)=>{
            console.log("获取数据失败"+error.error)
        })
    }

    render(){
        
        return(
            <Fragment>
                <div>
                    <label htmlFor='add'>增加服务</label>
                    <input 
                    id='add' 
                    className='input' 
                    value={this.state.inputValue}  
                    onChange={this.inputChange.bind(this)}
                    ref={(input)=>{this.input=input}}
                    />
                    <button onClick={this.addList.bind(this)}>增加服务</button>
                </div>
                <ul >
                    <TransitionGroup>
                    {
                        this.state.list.map((item,index)=>{
                            return (
                                    <CSSTransition
                                    unmountOnExit
                                    appear={true}
                                    timeout={1000}
                                    key={item+index}
                                    classNames='boss-text'
                                    >
                                        <XiaojiejieItem 
                                        content={item}
                                         
                                        index={index}
                                        list={this.state.list}
                                        deleteItem={this.deleteItem.bind(this)}
                                    ></XiaojiejieItem>  
                                    </CSSTransition>
                                
                                
                                /* {
                                    <li onClick={this.deleteItem.bind(this,index)}
                                    key={index+item}
                                    dangerouslySetInnerHTML={{__html:item}}
                                    >
                                    </li>
                                    }
                                */
                            )
                        })
                    }
                    </TransitionGroup>
                </ul>
                <Boss></Boss>
            </Fragment>
        )
    }
    inputChange(e){
        this.setState({
            inputValue:e.target.value
        })
    }
    addList(){
        this.setState({
            list:[...this.state.list,this.state.inputValue],
            inputValue:''
        })
        
    }
    deleteItem(index){
        let list=this.state.list
        list.splice(index,1)
        this.setState({
            list:list
        })
    }
}

export default Xiaojiejie




XiaojiejieItem.js

import React, { Component } from 'react';
import PropTypes from 'prop-types';

class XiaojiejieItem extends Component {
    constructor(props){
        super(props)
        this.handleClick=this.handleClick.bind(this)
    }
    shouldComponentUpdate(nextProps,nextState){
        if(nextProps!==this.props.content)
            return true
        else 
            return false
    }
    render(){
        console.log("render-----子组件正在挂载")
        return ( 
            <div onClick={this.handleClick}>{this.props.name}+{this.props.content}</div>
         );
    }
    handleClick(){
       this.props.deleteItem(this.props.index); 
    }
}

XiaojiejieItem.propTypes={
    content:PropTypes.string,
    deleteItem:PropTypes.func,
    index:PropTypes.number,
    name:PropTypes.string.isRequired
}
XiaojiejieItem.defaultProps={
    name:'waa'
}


export default XiaojiejieItem;

App.js

import React,{Component} from 'react'

class App extends Component{
    render(){
        return(
            <ul className='name'>
                <li>{false?'Hello world!':'hh'}</li>
                <li>hello beijing</li>
            </ul>
        )  
    }
}

export default App

Boss.js

import React, { Component } from 'react';
import {CSSTransition } from 'react-transition-group'

class Boss extends Component {
    constructor(props) {
        super(props);
        this.state = { 
            isShow:true
        }
        this.toToggole=this.toToggole.bind(this);
    }
    render() { 
        return ( 
            <div>
                <CSSTransition
                in={this.state.isShow}
                timeout={2000}
                classNames="boss-text"
                unmountOnExit
                >
                    <div>BOSS级人物-孙悟空</div>
                </CSSTransition>
                <div><button onClick={this.toToggole}>召唤Boss</button></div>
            </div>
         );
    }
    toToggole(){
        this.setState({
            isShow:this.state.isShow ? false : true
        })
    }
}
 
export default Boss;

index.css


.boss-text-enter{
    opacity:0;
    color:red;
}
.boss-text-enter-active{
    opacity: 1;
    transition: opacity 2000ms;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值