资讯专栏INFORMATION COLUMN

React表单

Coding01 / 3475人阅读

摘要:从服务端请求数据创建一个文件大胖分钟前天气不错啊骚胖分钟前出去玩啊老胖分钟前去哪玩啊从服务端请求数据为了页面的数据和服务端的保持联系,设置每隔五秒向服务端发生一次请求在帮顶一下事件提交表单。。。。

React表单

首先,我们需要搭建一个React环境,用来实现效果:

先安装React,这里我用的并不是最新版本的,所以需要选择一个版本:

jspm install react@0.14.0-rcl

安装完成后,接着安装一个react-dom:

jspm install react-dom@0.14.0-rcl

semantic-ui,这个插件并不是react必装的,这只是一个样式插件,装不装都可以,但是我这里图个方便就装上了:

jspm install semantic-ui

在这里直接把semantic引入,所以需要安装一个css插件:

jspm install css

然后用browser-sync创建一个服务器,用来监视一些文件的变化:

browser-sync start --server --no-notify --files "index.html. app/**/*.js" 

用编辑器打开文件当前所在的目录:

atom ./

这里我用了一个System来导入app底下的mian.js:

打开main.js,在里面把css样式引进来:

"use strict";


import "semantic-ui/semantic.min.js!";

下面是一个简单的排版,来看一下css样式:

下面我们就开始正式的编写程序了:

创建一个comment文件,在文件下面创建一个CommentBox.js:

"use strice";


import React from "react";  //导入react;
class CommentBox extends React.Component{
    constructor(props){
        spuer(props);
        this.state = {data:[]};
        this.getComments();
       // setInterval(() => this.getComments(),5000);
    }


    handleCommentSubmit(comment){
        let comments = this.state.data,
         newComments = comments.concat(comment);


        this.setState({data:newComments});
    }


    getComments(){
        $.ajax({
            url:this.props.url,
            dataType:"json",
            cache:false,
            success:comments => {
                this.set({data:comments});
            },
            error:(xhr,status,error) => {
                console.log(error);
            }
        });
    }
    render(){
        return (
            

评论

); } } export{CommentBox as default}; //作为一个默认的东西导出;

在网页中显示页面需要在main.js里面导入一些文件:

- html:
- main.js: "use strict" import "semantic-ui/semantic.min.css!"; import React from "react"; import ReactDOM from "react-dom"; import CommentBox from "./comment/CommentBox"; ReactDOM.render( , document.getElementById("app") );

然后在页面中就会显示:

接下来我们需要在定义两个组件,来把它们连在一起:

评论列表的组件(CommentList.js):

"use strict";


import React from "react";
import Comment from "./Comment";


class CommentList extends React.Component{
    render(){
        let commentNodes = this.props.data.map(comment => {
            return(
                
                    {comment.text}
                
            );
        })
        return(
            
{commentNodes}
); } } export {CommentList as default};

评论表单的组件(CommentForm.js):

"use strict";


import React from "react";


class CommentForm extends React.Component{
    handleSubmit(event){
        event.preventDefult();
        console.log("提交表单。。。。");
        let author = this.refs.author.value,
              text = this.refs.txte.value;


              console.log(author,text);
              this.props.onCommentSubmit({author,text,date:"刚刚"});
    }
    render(){
        return(
            
                
); } } export {CommentForm as default};
然后页面就会出现如下效果:

然后定义一个Cmment.js的一个组件,放到CommentList.js里面,然后在从CommentList.js里面传递一些数据到Cmment.js里面:

Cmment.js:

"use strict"


import React from "react";


class Comment extends React.Comment{
    render (){
        return (
            
{this.props.author}
{this.props.date}
{this.props.children}
); } } export {Comment as default};

CommentList.js:

"use strict";


import React from "react";
import Comment from "./Comment";  //引进Comment.js;


class CommentList extends React.Component{
    render(){
        let commentNodes = this.props.data.map(comment => {
            return(
                
                    {comment.text}
                
            );
        })
        return(
            
{commentNodes}
); } } export {CommentList as default};

注释:这事浏览器会显示一些内容,这些内容就是从render这个方法里面传递给CommentBox.js这个组件,然后再从CommentBox.js传递给CommentList.js,在CommentList.js这个组件里面循环的处理了一下每一条评论的内容,每一次都会用一次Comment这个组件,然后把评论的内容传递给Comment;控制台就会输出这些内容。

从服务端请求数据:

创建一个Comments.json文件:

[
    {"author":"大胖","date":"5 分钟前","text":"天气不错啊!!!"},
    {"author":"骚胖","date":"3 分钟前","text":"出去玩啊!!!"},
    {"author":"老胖","date":"1 分钟前","text":"去哪玩啊!!!"}
]

从服务端请求数据:

$.ajax({
    url:this.props.url,
    dataType:"json",
    cache:false,
    success:comments => {
         this.set({data:comments});
    },
    error:(xhr,status,error) => {
        console.log(error);
    }
});

为了页面的数据和服务端的保持联系,设置每隔五秒向服务端发生一次请求:

constructor(props){
        spuer(props);
        this.state = {data:[]};
        this.getComments();
        setInterval(() => this.getComments(),5000);
    }
getComments(){
        $.ajax({
            url:this.props.url,
            dataType:"json",
            cache:false,
            success:comments => {
                this.set({data:comments});
            },
            error:(xhr,status,error) => {
                console.log(error);
            }
        });
    }

在CommentForm.js帮顶一下事件:

class CommentForm extends React.Component{
    handleSubmit(event){
        event.preventDefult();
        console.log("提交表单。。。。");
        let author = this.refs.author.value,
              text = this.refs.txte.value;


              console.log(author,text);
              this.props.onCommentSubmit({author,text,date:"刚刚"});
    }
    render(){
        return(
            
                
); } }

接下来我们可以把写的内容输出到控制台上:

把提交的内容交给服务端处理:

在CommentBox.js上面添加一个方法:

handleCommentSubmit(comment){
        let comments = this.state.data,
         newComments = comments.concat(comment);


        this.setState({data:newComments});
    }
//这个方法就是告诉CommentBox.js,有人提交数据,就把这条数据放在这个方法里面执行一次;

最后我们就可以评论了:

在评论里面写上东西,然后点击提交,内容就会输出上去:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/84282.html

相关文章

  • 翻译 | 玩转 React 表单 —— 受控组件详解

    摘要:受控输入框只会显示通过传入的数据。例如,数组中的元素将会渲染三个单选框或复选框。属性接收一个布尔值,用来表示组件是否应该被渲染成选中状态。 原文地址:React.js Forms: Controlled Components 原文作者:Loren Stewart 译者:小 B0Y 校对者:珂珂君 本文涵盖以下受控组件: 文本输入框 数字输入框 单选框 复选框 文本域 下拉...

    big_cat 评论0 收藏0
  • 一个 React Form 组件的重构思路

    摘要:本文发布于我的博客最近对团队内部组件库中的组件进行了重构,记录一下思考的过程。暴露对外提供整个表单状态的方法通过在外监听每次触发的事件来获取整个的状态。子表单数量或类型发生变化时当下面子组件被添加或删除时,需要及时更新的结构。 本文发布于 我的博客 最近对团队内部 React 组件库(ne-rc)中的 Form 组件进行了重构,记录一下思考的过程。 一些前置定义: 名词 定义 ...

    Betta 评论0 收藏0
  • 快速构建高性能表单---JSXForm

    摘要:实现名称请输入名称类型请输入类型语法复杂代码量也比较庞大,说实话,到目前为止,我也没记住过它的那些方法,最严重的问题是存在比较严重的性能问题,当表单组件比较多的时间,页面会卡顿。 背景 表单问题,不管是在 jQuery 时代,还是 Angular/React 时代,都永远是前端工程师们的痛,但是这又是没办法的事情,业务需求多种多样,对于中后台业务而言,表单页面和报表页面基本上是中后台业...

    WalkerXu 评论0 收藏0
  • React中受控与非受控组件

    摘要:首次发表在个人博客受控组件或都要绑定一个事件每当表单的状态发生变化都会被写入组件的中这种组件在中被称为受控组件在受控组件中组件渲染出的状态与它的或者向对应通过这种方式消除了组件的局部状态是的应用的整个状态可控官方同样推荐使用受控表单组件总结 首次发表在个人博客 受控组件 { this.setState({ value: e.target.val...

    wenhai.he 评论0 收藏0
  • react组件通信实现表单提交

    摘要:组件通信实现表单提交昨晚做了一个的例子,主要实现的是提交表单实现评论的功能,在做之前先简单介绍一下。并称为前端大框架,就目前来看,尽管发布了也在今年月份发布了,更不在话下,大家要是想学习的话可以去官网学习。 react组件通信实现表单提交 昨晚做了一个react的例子,主要实现的是提交表单实现评论的功能,在做之前先简单介绍一下React。 showImg(https://segment...

    LoftySoul 评论0 收藏0
  • React 奇技淫巧 - defaultValue 和虚拟 dom diff 算法实现表单重置

    摘要:根据虚拟的算法,只要改变节点的类型就能促使在的时候重新创建虚拟。不过这个效果依赖于虚拟算法。如果使用时候出现什么副作用,鄙人概不负责。此技巧在写文章时正处于的版本 我们知道 React 的标准模式是单向数据流,而其表单项通常需要监听 onChange 事件,然后通过改变外部的 value 来回写表单项的 value,譬如如下 input class App extends React....

    paulquei 评论0 收藏0

发表评论

0条评论

Coding01

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<