ReactJS中的自定义组件实例代码

所属分类: 网络编程 / 相关技巧 阅读数: 1702
收藏 0 赞 0 分享

React 是一个用于构建用户界面的 JAVASCRIPT 库。

React 主要用于构建UI,很多人认为 React 是 MVC 中的 V(视图)。

React 起源于 Facebook 的内部项目,用来架设 Instagram 的网站,并于 2013 年 5 月开源。

React 拥有较高的性能,代码逻辑非常简单,越来越多的人已开始关注和使用它。

React 特点

1.声明式设计 −React采用声明范式,可以轻松描述应用。

2.高效 −React通过对DOM的模拟,最大限度地减少与DOM的交互。

3.灵活 −React可以与已知的库或框架很好地配合。

4.JSX − JSX 是 JavaScript 语法的扩展。React 开发不一定使用 JSX ,但我们建议使用它。

5.组件 − 通过 React 构建组件,使得代码更加容易得到复用,能够很好的应用在大项目的开发中。

6.单向响应的数据流 − React 实现了单向响应的数据流,从而减少了重复代码,这也是它为什么比传统数据绑定更简单。

可控自定义组件:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
    <script src="js/react.js"></script>
    <script src="js/react-dom.js"></script>
    <script src="js/browser.min.js"></script>
  </head>
  <body>
    <script type="text/babel">
      var Radio=React.createClass({
        getInitialState:function(){
          return {
            value:this.props.defaultValue
          };
        },
        handleChange:function(event){
          if(this.props.onChange){
            this.props.onChange(event);
          }
          this.setState({
            value:event.target.value
          });
        },
        render:function(){
          var children=[];
          var value=this.props.value||this.state.value;
          React.Children.forEach(this.props.children,function(child,i){
            var label=<label key={i}>
              <input type="radio" name={this.props.name} value={child.props.value} checked={child.props.value==value} onChange={this.handleChange}/>
              {child.props.children}
              <br/>
          </label>;
          children.push(label);
          }.bind(this));
          return <span>{children}</span>;
        }
      });
      var MyForm=React.createClass({
        getInitialState:function(){
          return ({my_radio:"B"});
        },

        handleChange:function(event){
          this.setState({
            my_radio:event.target.value
          });
        },
        submitHandler:function(event){
          event.preventDefault();
          alert(this.state.my_radio);
        },
        render:function(){
          return (
            <form onSubmit={this.submitHandler}>
            <Radio value={this.state.my_radio} name="my_radio" onChange={this.handleChange}>
              <option value="A">First option</option>
              <option value="B">Second option</option>
              <option value="C">Third option</option>
            </Radio>
            <button type="submit">Speak</button>
            </form>
          )
        }
      });

      ReactDOM.render(<MyForm></MyForm>,document.body);
    </script>
  </body>
</html>

不可控的自定义组件:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
    <script src="js/react.js"></script>
    <script src="js/react-dom.js"></script>
    <script src="js/browser.min.js"></script>
  </head>
  <body>
    <script type="text/babel">
      var Radio=React.createClass({
        getInitialState:function(){
          return {
            value:this.props.defaultValue
          };
        },
        handleChange:function(event){
          if(this.props.onChange){
            this.props.onChange(event);
          }
          this.setState({
            value:event.target.value
          });
        },
        render:function(){
          var children=[];
          var value=this.props.value||this.state.value;
          React.Children.forEach(this.props.children,function(child,i){
            var label=<label>
              <input type="radio" name={this.props.name} value={child.props.value} checked={child.props.value==value} onChange={this.handleChange}/>
              {child.props.children}
              <br/>
          </label>;
          children['label'+i]=label;
          }.bind(this));
          return <span>{children}</span>;
        }
      });
      var MyForm=React.createClass({
        handleSubmit:function(event){
          event.preventDefault();
          alert(this.refs.radio.state.value);
        },
        render:function(){
          return (
            <form onSubmit={this.handleSubmit}>
            <Radio ref="radio" name="my_radio" defaultValue="B">
              <p value="A">First</p>
              <option value="B">Second option</option>
              <option value="C">Third option</option>
            </Radio>
            <button type="submit">Speak</button>
            </form>
          )
        }
      });

      ReactDOM.render(<MyForm></MyForm>,document.body);
    </script>
  </body>
</html>

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
    <script src="js/react.js"></script>
    <script src="js/react-dom.js"></script>
    <script src="js/browser.min.js"></script>
  </head>
  <body>
    <script type="text/babel">
      var Radio=React.createClass({
        getInitialState:function(){
          return {
            value:this.props.defaultValue
          };
        },
        handleChange:function(event){
          if(this.props.onChange){
            this.props.onChange(event);
          }
          this.setState({
            value:event.target.value
          });
        },
        render:function(){
          var children=[];
          var value=this.props.value||this.state.value;
          React.Children.forEach(this.props.children,function(child,i){
            var label=<label>
              <input type="radio" name={this.props.name} value={child.props.value} checked={child.props.value==value} onChange={this.handleChange}/>
              {child.props.children}
              <br/>
          </label>;
          children['label'+i]=label;
          }.bind(this));
          return <span>{children}</span>;
        }
      });
      var MyForm=React.createClass({
        handleSubmit:function(event){
          event.preventDefault();
          alert(this.refs.radio.state.value);
        },
        render:function(){
          return (
            <form onSubmit={this.handleSubmit}>
            <Radio ref="radio" name="my_radio" defaultValue="B">
              <p value="A">First</p>
              <option value="B">Second option</option>
              <option value="C">Third option</option>
            </Radio>
            <button type="submit">Speak</button>
            </form>
          )
        }
      });

      ReactDOM.render(<MyForm></MyForm>,document.body);
    </script>
  </body>
</html>

以上所述是小编给大家介绍的ReactJS中的自定义组件实例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

更多精彩内容其他人还在看

Git 2.27.0详细安装步骤详解

这篇文章主要介绍了Git 2.27.0详细安装步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

利用git提交代码的方法步骤

这篇文章主要介绍了利用git提交代码的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Windows 系统下的 Git 2.7 最新下载及安装教程图文详解

这篇文章主要介绍了Windows 系统下的 Git 2.7 最新下载及安装教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

git clone 子模块没下载全的问题解决

这篇文章主要介绍了git clone 子模块没下载全的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

git中submodule子模块的添加、使用和删除的示例代码

这篇文章主要介绍了git中submodule子模块的添加、使用和删除的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

如何用idea+gitee来团队合作开发项目的教程

这篇文章主要介绍了如何用idea+gitee来团队合作开发项目,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

vscode配置setting.json文件实现eslint自动格式代码

这篇文章主要介绍了vscode配置setting.json文件实现eslint自动格式代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

AES加密算法的原理详解与实现分析

这篇文章主要介绍了高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,需要的朋友可以参考下
收藏 0 赞 0 分享

JetBrains(IEDA、CLion、Pycharm) 学生获得免费使用资格

JetBrains针对学生推出了免费使用资格,但是很多同学却不知道或者说不知道怎样获得免费资格,通过学生认证来使用JetBrains的软件才是最方便稳定的,具体怎么获取呢,感兴趣的朋友跟随小编一起看看吧
收藏 0 赞 0 分享

Clion、IEDA、pycharm的一些简单设置步骤(设置中文菜单、输出中文、字体大小、背景颜色主题)

这篇文章主要介绍了Clion、IEDA、pycharm的一些简单设置步骤(设置中文菜单、输出中文、字体大小、背景颜色主题),本文通过图文并茂的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多