Fork me on GitHub

react_wuyileij项目遇到的问题

1.create-react-app慢的解决方法

解决方案是换源,虽然平常使用cnpm来代替npm,但也只是使用新的指令而已,而在寻求create-react-app的相关配置希望修改registry时失败了,最后发现create-react-app指令默认调用npm,于是直接把npm的register给永久设置过来就好了,这样使用cnpm或者npm就没差别了。

 2.路由配置admin的用户的编辑问题

问题前(输入编辑地址出现的是列表页而非编辑页):

 

解决问题方式一:

方式二:

 

 

3.在Table渲染完数据后,在顶部做一个搜索框,自定义查找数据

遇到的问题:input中数据得到后,使用filter过滤后台中获取的数据,但是页面无法从新渲染,表单在input输入后无变化

解决思路:   参考文章https://www.azimiao.com/6729.html;

      明白了在function中它没有 class 组件中的 componentDidMount、componentDidUpdate 等生命周期方法,也没有 State,但这些可以通过 React Hook 实现。

解决前:

import React,{useEffect,useState} from 'react'
import {Card,Table,Button,Popconfirm, Input} from 'antd'
import axios from 'axios'

function List_rubbish(props) {
     let val='';   
    //定义局部状态
    const [dataSource,setDataSource]=useState([]);
    
    useEffect(() => {
        
        axios({
            method:'get',
            url:'http://127.0.0.1:3000/rubbish',
            header: { 'content-type': 'application/json'},
          }).then(function(res) {
            console.log(res)
            setDataSource(res.data.filter((e)=>{return e.name.includes(val)}));
          });
    }, [])
    
    const columns=[{
        title:'序号',
        key:"id",
        width:80,
        align:'center',
        dataIndex:'id'
    },{
        title:'垃圾名称',
        width:500,
        dataIndex:'name',
        align:'center'
    },{
        title:'类别',
        width:400,
        dataIndex:'category',
        align:'center'
    },{
        title:'操作',
        render:(txt,record,index)=> {
            return (
                <div>
                    <Button type="primary" size="small">修改</Button>
                    <Popconfirm title="确定删除此项" 
                            onCancel={()=>{console.log("用户取消删除!")}} 
                            onConfirm={()=>{console.log("用户确定删除!")
                        //此处需要调用接口
                            
                        }
                            }>
                        <Button style={{margin:"0 1rem"}} type="danger" size="small">删除</Button>
                    </Popconfirm>
                </div>
            )
        }
    }]
    return (
      <Card 
        title="垃圾列表" 
        extra={
            <Button type="primary" size="small" onClick={()=>{props.history.push('/admin/rubbish/edit/:id?')}}>新增</Button>
        }   
      >
          <Input style={{width:'50%',marginRight:'20px',marginBottom:'20px'}} 
            onInput={e=>{val=e.target.value;     
                   console.log(e.target.value)}}/>
          
          <Table rowKey="id" columns={columns} bordered dataSource={dataSource}/>
      </Card>
    )
}

export default List_rubbish
    

解决后:

import React,{useEffect,useState} from 'react'
import {Card,Table,Button,Popconfirm, Input} from 'antd'
import axios from 'axios'
 
function List_rubbish(props) {
        
    //定义局部状态
    const [dataSource,setDataSource]=useState([]);
    const [allNumber,setAllNumber] = React.useState("");

    useEffect(() => {
        
        axios({
            method:'get',
            url:'http://127.0.0.1:3000/rubbish',
            header: { 'content-type': 'application/json'},
          }).then(function(res) {
            console.log(res)
            setDataSource(res.data.filter((e)=>{return e.name.includes(allNumber)}));
          });
    }, [allNumber])
    
    const columns=[{
        title:'序号',
        key:"id",
        width:80,
        align:'center',
        dataIndex:'id'
    },{
        title:'垃圾名称',
        width:500,
        dataIndex:'name',
        align:'center'
    },{
        title:'类别',
        width:400,
        dataIndex:'category',
        align:'center'
    },{
        title:'操作',
        render:(txt,record,index)=> {
            return (
                <div>
                    <Button type="primary" size="small">修改</Button>
                    <Popconfirm title="确定删除此项" 
                            onCancel={()=>{console.log("用户取消删除!")}} 
                            onConfirm={()=>{console.log("用户确定删除!")
                        //此处需要调用接口
                            
                        }
                            }>
                        <Button style={{margin:"0 1rem"}} type="danger" size="small">删除</Button>
                    </Popconfirm>
                </div>
            )
        }
    }]
    return (
      <Card 
        title="垃圾列表" 
        extra={
            <Button type="primary" size="small" onClick={()=>{props.history.push('/admin/rubbish/edit/:id?')}}>新增</Button>
        }   
      >
          <Input style={{width:'50%',marginRight:'20px',marginBottom:'20px'}} 
            onInput={e=>setAllNumber(e.target.value)}/>
          <Table rowKey="id" columns={columns} bordered dataSource={dataSource}/>
      </Card>
    )
}

export default List_rubbish

成功图:

 

3.在编辑页面时,id设置为disabled 但是无法获取其默认值

修改方法:在Form标签中添加initialValues属性

 <Form 
        name="rubbishForm"
        onFinish={onFinish}
        onFinishFailed={onFinishFailed}
        initialValues={
          {rubbishId:"123"}
        }>
        <Form.Item
          name="rubbishId"
          label="id"    
          >
          <Input value="123" disabled/>
        </Form.Item>
</Form>
 

 

 

4.消息通知的思路,

在数据库建立一个notice表,每当user表,sort_list表,message表,发生了增删改事件,这个notice表对应增加数据的变化,在主页调用接口。

有新消息通知时,小红点提示,用组件传值。

 

posted on 2020-10-06 20:47  康心志  阅读(139)  评论(0编辑  收藏  举报

导航