整体页面效果

项目技术点

  • antd组件库,@ant-design/icons antd的图标库
  • axios 接口请求,拦截器配置
  • node-sass sass-loader css样式的一个嵌套
  • react-router-dom react路由使用
  • react-redux redux
  • hooks:大多数我们用的是函数组件,函数组件没有state属性,所以我们使用hooks来初始化数据,并且函数组件没有生命周期

拦截器的配置

由于我们登录成功之后,需要我们获取到token令牌之后,我们才能获取到数据,如果每个页面都需要获取一次token,代码比较啰嗦,所以我们配置了一个拦截器

需要授权的 API ,必须在请求头中使用 Authorization 字段提供 token 令牌

//配置拦截器
import axios from "axios";
//2. 创建对象
const Server = axios.create({
    baseURL:"http://api.xiaohuihui0728.cn:8888/api/private/v1/",//基地址
    timeout:5000,
})
//3. 请求拦截器
Server.interceptors.request.use((config)=>{
    //前置拦截器请求发送出去之前触发
    console.log(config);
    //增加一个token值
    let token = sessionStorage.getItem("token");
    config.headers["Authorization"] = token; 
    return config;
},(err)=>Promise.reject(err));
//4. 响应拦截器
Server.interceptors.response.use((response)=>{
    //请求成功,服务端返回数据到客户端之前触发
    return response.data;
},(err)=>Promise.reject(err))
//5.抛出Serve对象的内容
export default Server;

主页面

我们的数据写在columns里面,在里面的dataIndex绑定我们获取到的数据

  const columns = [
        {
            title: '商品名称',
            dataIndex: 'goods_name',
            key: 'username',
        },
        {
            title: '商品价格',
            dataIndex: 'goods_price',
            key: 'email',
        },
        {
            title: '商品重量',
            dataIndex: 'goods_weight',
            key: 'mobile',
        },
        {
            title: '创建时间',
            dataIndex: 'goods_state',
            key: 'role_name',
        },
        {
            title: '操作',
            key: 'action',
            render: (_, record) => {
                return (
                    <>
                        <Button type="primary" size="small" onClick={() => { showedit(record.goods_id) }}> <EditOutlined /> </Button> &nbsp;
                        <Button type="primary" size="small" danger onClick={() => { delGoods(record.goods_id) }} > <DeleteOutlined /> </Button> &nbsp;
                    </>
                )
            }
        }
    ];
    const [userData, setUserData] = useState([])
 // 初始化数据 
    useEffect(() => {
        getUserData()
        setPage(1)
    }, [search, page, pageSize])
 // 初始化请求数据 用户
    const getUserData = async () => {
        console.log(pageSize);
        console.log(search);
        console.log(page);
        let { data } = await axios.get(`goods?pagenum=${page}&query=${search}&pagesize=${pageSize}`)
        console.log(data.goods);
        if (data) {
            setTotal(data.total);
            setUserData(data.goods);
        }
    }
 <Table pagination={false} bordered dataSource={userData} columns={columns} rowKey={(record) => record.goods_id} />

添加商品

添加弹出对话框,添加里面有一个上传图片,我们上传的图片有一个单独的添加接口,所以我们使用action属性绑定我们要上传的路径,headres获取token,使用onChange获取图片上传的路径,然后在我们点击提交form表单数据时把图片临时地址添加成功

    // 添加弹窗状态 
    const [addIsModalVisible, setAddIsModalVisible] = useState(false);
    // 存图片
    let [img,setimg] = useState("");
  // 添加取消 
    const addHandleCancel = () => {
        setAddIsModalVisible(false);
    };
//获取token
   let token = sessionStorage.getItem("token");
    // 添加商品
    const onAdd = async (value)=>{
        console.log(value);
        let pics = [{pic:img}];
        let data= await axios.post("goods",{...value,pics})
        setAddIsModalVisible(false);
        getUserData()
    }
//图片上传
    const success = (info)=>{
        if(info.file.status==="done"){
            console.log(info.file.response.data.tmp_path);
            setimg(info.file.response.data.tmp_path)
        } 
    }          
 <Modal title="商品添加" visible={addIsModalVisible} footer={null} ref={addFormRef}>
                <Form
                    name="basic"
                    labelCol={{ span: 4 }}
                    wrapperCol={{ span: 16 }}
                    initialValues={{ remember: true }}
                    onFinish={onAdd}
                    onFinishFailed={onFinishFailed}
                    autoComplete="off"
                >
                    <Form.Item
                        label="商品名称"
                        name="goods_name"
                        rules={[{ required: true, message: '请输入商品名称' }]}
                    >
                        <Input />
                    </Form.Item>
                    <Form.Item
                        label="商品价格"
                        name="goods_price"
                        rules={[{ required: true, message: '请输入商品价格' }]}
                    >
                        <Input />
                    </Form.Item>
                    <Form.Item
                        label="商品数量"
                        name="goods_number"
                        rules={[{ required: true, message: '请输入商品数量' }]}
                    >
                        <Input />
                    </Form.Item>
                    <Form.Item
                        label="商品重量"
                        name="goods_weight"
                        rules={[{ required: true, message: '请输入商品重量' }]}
                    >
                        <Input />
                    </Form.Item>
                    <Form.Item
                        label="商品图片"
                        name="pics"
                    >
                        <Upload {...props} action='http://api.xiaohuihui0728.cn:8888/api/private/v1/upload'
                         headers={{"Authorization":token}} onChange={success} listType='picture'>
                            <Button type='primary'>上传图片</Button>
                        </Upload>
                    </Form.Item>
                    <Form.Item wrapperCol={{ ...layout.wrapperCol, offset: 16 }}>
                        <Button type="primary" htmlType="submit" >
                            Submit
                        </Button>
                        &nbsp;
                        <Button type="primary" onClick={() => { (addHandleCancel()) }} danger>
                            取消
                        </Button>
                    </Form.Item>
                </Form>
            </Modal>
 <Button type="primary" onClick={showModal}> <EditOutlined /> 添加商品 </Button>

分页与搜索

我们在获取数据的时候,就获取我们的分页条数和总数以及搜索的关键字,然后在分页中进行数据属性的配置即可

  // 搜索 
    let [search, setSearch] = useState("")
    // 总条数
    let [total, setTotal] = useState(0)
    // 当前页
    let [page, setPage] = useState(1)
   // 每页条数 
    let [pageSize, setPageSize] = useState(2)
   // 搜索 
    const onSearch = (val) => {
        setSearch(val)
    }
    // 分页
    const onChange = (page, pageSize) => {
        setPage(page)
        setPageSize(pageSize)
    }
 // 初始化请求数据 用户
    const getUserData = async () => {
        console.log(pageSize);
        console.log(search);
        console.log(page);
        let { data } = await axios.get(`goods?pagenum=${page}&query=${search}&pagesize=${pageSize}`)
        console.log(data.goods);
        if (data) {
            setTotal(data.total);
            setUserData(data.goods);
        }
    } 
<Search allowClear placeholder="input search text" onSearch={onSearch} enterButton style={{ width: 300, height: 60 }} />
 <Pagination
                    className='pagination'
                    total={total}
                    showSizeChanger
                    showQuickJumper
                    pageSizeOptions={[10, 20, 30]}
                    defaultPageSize={2}
                    showTotal={(total) => `Total ${total} items`}
                    onChange={onChange}
                />

修改商品

我们在点击修改弹出对话框的同时,需要把数据绑定到输入框内,我们利用formRef.current.setFieldsValue进行数据回填,然后请求修改接口即可

    // 修改弹出框
    const [isModalVisible, setIsModalVisible] = useState(false); 
    // 修改弹出框,数据回填
    const showedit = async (e) => {
        setIsModalVisible(true);
        setgoodid(e)
        let { data } = await axios.get(`goods/${e}`)
        console.log(data);
        formRef.current.setFieldsValue({
            goods_name: data.goods_name,
            goods_price: data.goods_price,
            goods_number: data.goods_number,
            goods_weight: data.goods_weight
        })
    };
  // 修改取消按钮
    const editHandleCancel = () => {
        setIsModalVisible(false)
    }
// 修改商品
    const onFinish = async (values) => {
        let { meta } = await axios.put(`goods/${goodid}`, {
            goods_name: values.goods_name,
            goods_number: values.goods_number,
            goods_price: values.goods_price,
            goods_weight: values.goods_weight
        })
        // console.log(data);
        if (meta.status === 200) {
            message.success(meta.msg)
            setIsModalVisible(false);
            getUserData()
        } else {
            message.info(meta.msg)
            setIsModalVisible(false);
        }
    };
 <Button type="primary" size="small" onClick={() => { showedit(record.goods_id) }}> <EditOutlined /> </Button>
 {/* 修改弹出框 */}
            <Modal title="修改商品" visible={isModalVisible} footer={null}>
                <Form
                    name="basic"
                    labelCol={{ span: 4 }}
                    wrapperCol={{ span: 16 }}
                    initialValues={{ remember: true }}
                    onFinish={onFinish}
                    onFinishFailed={onFinishFailed}
                    autoComplete="off"
                    {...layout}
                    ref={formRef}
                >
                    <Form.Item
                        label="商品名称"
                        name="goods_name"
                        rules={[{ required: true, message: '请输入商品名称' }]}
                    >
                        <Input />
                    </Form.Item>
                    <Form.Item
                        label="商品价格"
                        name="goods_price"
                        rules={[{ required: true, message: '请输入商品价格' }]}
                    >
                        <Input />
                    </Form.Item>
                    <Form.Item
                        label="商品数量"
                        name="goods_number"
                        rules={[{ required: true, message: '请输入商品数量' }]}
                    >
                        <Input />
                    </Form.Item>
                    <Form.Item
                        label="商品重量"
                        name="goods_weight"
                        rules={[{ required: true, message: '请输入商品重量' }]}
                    >
                        <Input />
                    </Form.Item>
 
                    <Form.Item wrapperCol={{ ...layout.wrapperCol, offset: 16 }}>
                        <Button type="primary" htmlType="submit">
                            Submit
                        </Button>
                        &nbsp;
                        <Button type="primary" onClick={() => { (editHandleCancel()) }} danger>
                            取消
                        </Button>
                    </Form.Item>
                </Form>
            </Modal>

删除商品

点击删除按钮传递一个id,然后请求删除接口即可

    // 删除
    const delGoods = async (e) => {
        console.log(e);
        let { meta } = await axios.delete(`goods/${e}`)
        switch (meta.status) {
            case 200:
                message.success(meta.msg)
                break;
            default:
                message.warning("删除失败")
                break;
        }
        getUserData()
    }
<Button type="primary" size="small" danger onClick={() => { delGoods(record.goods_id) }} > <DeleteOutlined /> </Button>

完整代码

import { DeleteOutlined, EditOutlined } from '@ant-design/icons';
import { Button, Card, Form, Input, message, Modal, Pagination, Table, Upload } from 'antd';
import React, { useEffect, useRef, useState } from 'react';
import axios from '../utils/request';
import './goods.scss';
const { Search } = Input;
const props = {
    name: 'file',
    action: 'https://www.mocky.io/v2/5cc8019d300000980a055e76',
    headers: {
        authorization: 'authorization-text',
    }
}
export default function Goods() {
    let formRef = useRef()
    let addFormRef = useRef(null)
    const [userData, setUserData] = useState([])
    // 添加弹窗状态 
    const [addIsModalVisible, setAddIsModalVisible] = useState(false);
    // 存图片
    let [img,setimg] = useState("");
    // 搜索 
    let [search, setSearch] = useState("")
    // 总条数
    let [total, setTotal] = useState(0)
    // 当前页
    let [page, setPage] = useState(1)
    // 修改弹出框
    const [isModalVisible, setIsModalVisible] = useState(false);
    // 每页条数 
    let [pageSize, setPageSize] = useState(2)
    const [goodid, setgoodid] = useState(0)
    const showModal = () => {
        setAddIsModalVisible(true);
    };
// 修改商品
    const onFinish = async (values) => {
        let { meta } = await axios.put(`goods/${goodid}`, {
            goods_name: values.goods_name,
            goods_number: values.goods_number,
            goods_price: values.goods_price,
            goods_weight: values.goods_weight
        })
        // console.log(data);
        if (meta.status === 200) {
            message.success(meta.msg)
            setIsModalVisible(false);
            getUserData()
        } else {
            message.info(meta.msg)
            setIsModalVisible(false);
        }
    };
    const onFinishFailed = (errorInfo) => {
        console.log('Failed:', errorInfo);
    };
    // 修改弹出框,数据回填
    const showedit = async (e) => {
        setIsModalVisible(true);
        setgoodid(e)
        let { data } = await axios.get(`goods/${e}`)
        console.log(data);
        formRef.current.setFieldsValue({
            goods_name: data.goods_name,
            goods_price: data.goods_price,
            goods_number: data.goods_number,
            goods_weight: data.goods_weight
        })
    };
    // 初始化数据 
    useEffect(() => {
        getUserData()
        setPage(1)
    }, [search, page, pageSize])
    // 添加
    const layout = { labelCol: { span: 4 }, wrapperCol: { span: 20 } };
    // 添加取消 
    const addHandleCancel = () => {
        setAddIsModalVisible(false);
    };
    // 修改取消按钮
    const editHandleCancel = () => {
        setIsModalVisible(false)
    }
    // 删除
    const delGoods = async (e) => {
        console.log(e);
        let { meta } = await axios.delete(`goods/${e}`)
        switch (meta.status) {
            case 200:
                message.success(meta.msg)
                break;
            default:
                message.warning("删除失败")
                break;
        }
        getUserData()
    }
    // 初始化请求数据 用户
    const getUserData = async () => {
        console.log(pageSize);
        console.log(search);
        console.log(page);
        let { data } = await axios.get(`goods?pagenum=${page}&query=${search}&pagesize=${pageSize}`)
        console.log(data.goods);
        if (data) {
            setTotal(data.total);
            setUserData(data.goods);
        }
    }
    const columns = [
        {
            title: '商品名称',
            dataIndex: 'goods_name',
            key: 'username',
        },
        {
            title: '商品价格',
            dataIndex: 'goods_price',
            key: 'email',
        },
        {
            title: '商品重量',
            dataIndex: 'goods_weight',
            key: 'mobile',
        },
        {
            title: '创建时间',
            dataIndex: 'goods_state',
            key: 'role_name',
        },
        {
            title: '操作',
            key: 'action',
            render: (_, record) => {
                return (
                    <>
                        <Button type="primary" size="small" onClick={() => { showedit(record.goods_id) }}> <EditOutlined /> </Button> &nbsp;
                        <Button type="primary" size="small" danger onClick={() => { delGoods(record.goods_id) }} > <DeleteOutlined /> </Button> &nbsp;
                    </>
                )
            }
        }
    ];
    // 搜索 
    const onSearch = (val) => {
        setSearch(val)
    }
    // 分页
    const onChange = (page, pageSize) => {
        setPage(page)
        setPageSize(pageSize)
    }
    let token = sessionStorage.getItem("token");
    // 添加商品
    const onAdd = async (value)=>{
        console.log(value);
        let pics = [{pic:img}];
        let data= await axios.post("goods",{...value,pics})
        setAddIsModalVisible(false);
        getUserData()
    }
    const success = (info)=>{
        if(info.file.status==="done"){
            console.log(info.file.response.data.tmp_path);
            setimg(info.file.response.data.tmp_path)
        } 
    }
    return (
        <div className='goods'>
            {/* 主体表格区域 */}
            <Card >
                <Search allowClear placeholder="input search text" onSearch={onSearch} enterButton style={{ width: 300, height: 60 }} />
                &nbsp;
                <Button type="primary" onClick={showModal}> <EditOutlined /> 添加商品 </Button>
                <Table pagination={false} bordered dataSource={userData} columns={columns} rowKey={(record) => record.goods_id} />
                <Pagination
                    className='pagination'
                    total={total}
                    showSizeChanger
                    showQuickJumper
                    pageSizeOptions={[10, 20, 30]}
                    defaultPageSize={2}
                    showTotal={(total) => `Total ${total} items`}
                    onChange={onChange}
                />
            </Card>
            <Modal title="商品添加" visible={addIsModalVisible} footer={null} ref={addFormRef}>
                <Form
                    name="basic"
                    labelCol={{ span: 4 }}
                    wrapperCol={{ span: 16 }}
                    initialValues={{ remember: true }}
                    onFinish={onAdd}
                    onFinishFailed={onFinishFailed}
                    autoComplete="off"
                >
                    <Form.Item
                        label="商品名称"
                        name="goods_name"
                        rules={[{ required: true, message: '请输入商品名称' }]}
                    >
                        <Input />
                    </Form.Item>
                    <Form.Item
                        label="商品价格"
                        name="goods_price"
                        rules={[{ required: true, message: '请输入商品价格' }]}
                    >
                        <Input />
                    </Form.Item>
                    <Form.Item
                        label="商品数量"
                        name="goods_number"
                        rules={[{ required: true, message: '请输入商品数量' }]}
                    >
                        <Input />
                    </Form.Item>
                    <Form.Item
                        label="商品重量"
                        name="goods_weight"
                        rules={[{ required: true, message: '请输入商品重量' }]}
                    >
                        <Input />
                    </Form.Item>
                    <Form.Item
                        label="商品图片"
                        name="pics"
                    >
                        <Upload {...props} action='http://api.xiaohuihui0728.cn:8888/api/private/v1/upload'
                         headers={{"Authorization":token}} onChange={success} listType='picture'>
                            <Button type='primary'>上传图片</Button>
                        </Upload>
                    </Form.Item>
                    <Form.Item wrapperCol={{ ...layout.wrapperCol, offset: 16 }}>
                        <Button type="primary" htmlType="submit" >
                            Submit
                        </Button>
                        &nbsp;
                        <Button type="primary" onClick={() => { (addHandleCancel()) }} danger>
                            取消
                        </Button>
                    </Form.Item>
                </Form>
            </Modal>
            {/* 修改弹出框 */}
            <Modal title="修改商品" visible={isModalVisible} footer={null}>
                <Form
                    name="basic"
                    labelCol={{ span: 4 }}
                    wrapperCol={{ span: 16 }}
                    initialValues={{ remember: true }}
                    onFinish={onFinish}
                    onFinishFailed={onFinishFailed}
                    autoComplete="off"
                    {...layout}
                    ref={formRef}
                >
                    <Form.Item
                        label="商品名称"
                        name="goods_name"
                        rules={[{ required: true, message: '请输入商品名称' }]}
                    >
                        <Input />
                    </Form.Item>
                    <Form.Item
                        label="商品价格"
                        name="goods_price"
                        rules={[{ required: true, message: '请输入商品价格' }]}
                    >
                        <Input />
                    </Form.Item>
                    <Form.Item
                        label="商品数量"
                        name="goods_number"
                        rules={[{ required: true, message: '请输入商品数量' }]}
                    >
                        <Input />
                    </Form.Item>
                    <Form.Item
                        label="商品重量"
                        name="goods_weight"
                        rules={[{ required: true, message: '请输入商品重量' }]}
                    >
                        <Input />
                    </Form.Item>
                    <Form.Item wrapperCol={{ ...layout.wrapperCol, offset: 16 }}>
                        <Button type="primary" htmlType="submit">
                            Submit
                        </Button>
                        &nbsp;
                        <Button type="primary" onClick={() => { (editHandleCancel()) }} danger>
                            取消
                        </Button>
                    </Form.Item>
                </Form>
            </Modal>
        </div>
    )
}

到此这篇关于react电商商品列表的实现流程详解的文章就介绍到这了,更多相关react商品列表内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

react电商商品列表的实现流程详解的更多相关文章

  1. ios – React native链接到另一个应用程序

    如果是错误的,有人知道如何调用正确的吗?

  2. ios – React Native – 在异步操作后导航

    我正在使用ReactNative和Redux开发移动应用程序,我正面临着软件设计问题.我想调用RESTAPI进行登录,如果该操作成功,则导航到主视图.我正在使用redux和thunk所以我已经实现了异步操作,所以我的主要疑问是:我应该把逻辑导航到主视图?我可以直接从动作访问导航器对象并在那里执行导航吗?.我对组件中的逻辑没有信心.似乎不是一个好习惯.有没有其他方法可以做到这一点?

  3. 在ios中使用带有React Native(0.43.4)的cocoapods的正确方法是什么?

    我已经挖掘了很多帖子试图使用cocoapods为本地ios库设置一个反应原生项目,但我不可避免地在#import中找到了丢失文件的错误.我的AppDelegate.m文件中的语句.什么是使用反应原生的可可豆荚的正确方法?在这篇文章发表时,我目前的RN版本是0.43.4,而我正在使用Xcode8.2.1.这是我的过程,好奇我可能会出错:1)

  4. ios – React Native WebView滚动行为无法按预期工作

    如何确保滚动事件的行为与ReactNative应用程序中的浏览器相同?

  5. ios – React Native – BVLinearGradient – 找不到’React/RCTViewManager.h’文件

    谢谢.解决方法几天前我遇到了完全相同的问题.问题是在构建应用程序时React尚未链接.试试这个:转到Product=>Scheme=>管理方案…=>点击你的应用程序Scheme,然后点击Edit=>转到Build选项卡=>取消选中ParallelizeBuild然后点击标志添加目标=>搜索React,选择第一个名为React的目标,然后单击Add然后在目标列表中选择React并将其向上拖动到该列表中的第一个.然后转到Product=>再次清理并构建项目.这应该有所帮助.

  6. ios – React Native – NSNumber无法转换为NSString

    解决方法在你的fontWeight()函数中也许变成:

  7. ios – React native error – react-native-xcode.sh:line 45:react-native:command not found命令/ bin/sh失败,退出代码127

    尝试构建任何(新的或旧的)项目时出现此错误.我的节点是版本4.2.1,react-native是版本0.1.7.我看过其他有相同问题的人,所以我已经更新了本机的最新版本,但是我仍然无法通过xcode构建任何项目.解决方法要解决此问题,请使用以下步骤:>使用节点版本v4.2.1>cd进入[你的应用]/node_modules/react-native/packager>$sh./packager.s

  8. 反应原生 – 如何通过Xcode构建React Native iOS应用程序到设备?

    我试图将AwesomeProject应用程序构建到设备上.构建成功并启动屏幕显示,但后来我看到一个红色的“无法连接到开发服务器”屏幕.它表示“确保节点服务器正在运行–从Reactroot运行”npmstart“.看起来节点服务器已经运行,因为当我做npm启动时,我收到一个EADDRINUSE消息,表示该端口已经在使用.解决方法从设备访问开发服务器您可以使用开发服务器快速迭代设备.要做到这一点,你的

  9. 静音iOS推送通知与React Native应用程序在后台

    我有一个ReactNative应用程序,我试图获得一个发送到JavaScript处理程序的静默iOS推送通知.我看到的行为是AppDelegate中的didReceiveRemoteNotification函数被调用,但是我的JavaScript中的处理程序不会被调用,除非应用程序在前台,或者最近才被关闭.我很困惑的事情显然是应用程序正在被唤醒,并且它的didReceiveRemoteNotifi

  10. 如何为iOS的React Native设置分析

    所以我已经完成了一个针对iOS的ReactNative项目,但是我想在其中分析.我尝试了react-native-google-analytics软件包,但是问题阻止了它的正常工作.此外,react-native-cordova-plugin软件包只适用于Android,因此插入Cordova插件进行分析的能力现在已成为问题.我也没有Swift/ObjectiveC的经验,所以将完全失去GA的插入.有没有人有任何建议如何连接GoogleAnalytics的ReactNativeforiOS?

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部