博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Reactjs 踏坑指南3:一些例子(未完成)
阅读量:6404 次
发布时间:2019-06-23

本文共 7403 字,大约阅读时间需要 24 分钟。

React 踏坑指南3:

准备工作

知识准备

文件引用

文件基本结构

      
Hello React!
复制代码

几个mini demo

1.点击+1效果

var ClickApp = React.createClass({    getInitialState: function() {      return {        clickCount: 0      }    },    clickHandle: function() {      this.setState({        clickCount: this.state.clickCount + 1      })    },    render: function() {      return (          

请点击下方按钮

{this.state.clickCount}

) } }); var ClickComponent = ReactDOM.render(
,document.getElementById('example') )复制代码

2.组件间基本嵌套

var MessageBox = React.createClass({    getInitialState: function(){      return {        isVisiable: true,        titleMessage: 'Hello World !'      }    },    render: function(){      var styleObj = {        display : this.state.isVisiable ? 'block' : 'none'      }      return (        

{this.state.titleMessage}

) } }); var Submessage = React.createClass({ render:function() { return (

you are right !

) } }) var componentBox = ReactDOM.render(
,document.getElementById('example'),function(){} )复制代码

3.表单&ref引用

var FormApp = React.createClass({    getInitialState: function() {      return {        inputValue: 'input value',        selectValue: 'A',        radioValue:'B',        checkValues:[],        textareaValue:'some text here...'      }    },    handleSubmit:function(e) {      e.preventDefault();      console.log('form submitting...')      var formData = {        input: this.refs.goodInput.value,        select: this.refs.goodSelect.value,        textarea: this.refs.goodTextarea.value,        radio: this.state.radioValue,        check:this.state.checkValues      }      console.log('#####')      console.log(formData)      //this.refs.goodRadio.saySomething(0) //通过refs引用目标组建后,就可以调用子组件的方法和属性    },    handleRadio: function(e){      this.setState({        radioValue: e.target.value      })    },    handleCheck: function(e){      var checkValues = this.state.checkValues.slice();      var newVal = e.target.value;      var index = checkValues.indexOf(newVal);      if( index == -1) {        checkValues.push(newVal)      } else {        checkValues.splice(index,1)      }      this.setState({        checkValues: checkValues      })    },    render: function() {      return (          
选项:

radio button

checkbox

) } }); var RadioButton = React.createClass({ saySomething:function(){ alert('whats your name') }, render:function(){ return (
A B C ) } }) var CheckBoxs = React.createClass({ render:function(){ return (
) } }) var FormComponent = ReactDOM.render(
,document.getElementById('example') )复制代码

4.组件间通信

var MessageBox = React.createClass({    getInitialState: function(){      return {        subMessages : [          '全能骑士',          '死灵法师',          '敌法师',          '影魔',          '冰龙'        ],      }    },    render: function(){      return (        
) } }); var Submessage = React.createClass({ propTypes: { messages: React.PropTypes.array.isRequired }, getDefaultProps: function(){ return { messages:['通道阻塞,默认召唤小黑'] } }, render:function() { var msgs = []; this.props.messages.forEach(function(msg, index) { msgs.push(

召唤 第{index+1}位英雄: {msg}

) }) return (
{msgs}
) } }) var componentBox = ReactDOM.render(
,document.getElementById('example'),function(){} )复制代码

5.组件间双向通信

var MixinsTest = React.createClass({    mixins: [React.addons.LinkedStateMixin],    getInitialState: function(){      return {        message: '我帅吗?',        isTrue: true      }    },    render: function() {      return (        

{this.state.message}

你怎么认为?{this.state.isTrue? '那当然':'拉倒吧'}

) } }); var SubComp = React.createClass({ render:function(){ return (

这个是个子组件哦

// 相当于执行SubSubComp messageLink={this.props.messageLink} likeLink={this.props.likeLink} />
) } }); var SubSubComp = React.createClass({ render:function(){ return (

你想说什么呢

) } }); var componentBox = React.render(
,document.getElementById('example') ) 复制代码

生命周期

var MessageBox = React.createClass({        getDefaultProps:function(){            console.log('getDefaultProps');            return {};        },                getInitialState:function(){            console.log('getInitialState');            return {                count: 0,            }        },        componentWillMount:function(){            console.log('componentWillMount');        /*    var self = this;            this.timer = setInterval(function(){                self.setState({                    count: self.state.count + 1,                })            },1000);*/        },        componentDidMount:function(){            console.log('componentDidMount')        },        componentWillUnmount: function(){            alert('you are tring to kill me !! ')            /*clearInterval(this.timer);*/        },                shouldComponentUpdate:function(nextProp,nextState){            console.log('shouldComponentUpdate');            if(nextState.count > 10) return false;            return true;        },        componentWillUpdate:function(nextProp,nextState){            console.log('componentWillUpdate');        },        componentDidUpdate:function(){            console.log('componentDidUpdate');        },        killMySelf: function(){            React.unmountComponentAtNode(  document.getElementById('example') );        },        doUpdate:function(){            this.setState({                count: this.state.count + 1,            });        },        render:function(){                console.log('渲染')            return (                 

计数: {this.state.count}

) } }); var Submessage = React.createClass({ componentWillReceiveProps:function(nextProp){ console.log('子组件将要获得prop'); }, shouldComponentUpdate:function(nextProp,nextState){ if(nextProp.count> 5) return false; return true; }, render:function(){ return (

当前计数是:{this.props.count}

) } }); var messageBox = React.render(
, document.getElementById('example') )复制代码

转载地址:http://zxnea.baihongyu.com/

你可能感兴趣的文章
备战一线互联网公司Java工程师面试题 (1)
查看>>
ThinkPHP中自动验证失败
查看>>
jquery图片切换插件jquery.cycle.js参数详解
查看>>
JavaScript push() 方法
查看>>
Map集合
查看>>
JSP基础语法1
查看>>
elasticsearch Java API 之GET API & DELETE API
查看>>
《深入理解Java虚拟机》——GC基础概念
查看>>
微信小程序联盟:官方文档+精品教程+demo集合(5月31日更新,持续更新中……)...
查看>>
Fastjson 的 Set类型和 WriteClassName 选项引起的BUG
查看>>
翻译: 星球生成 II
查看>>
IOS 多线程
查看>>
python序列化数据本地存放
查看>>
#CCNA#IP地址、子网划分参考资料网址
查看>>
比较不错的图片上传插件
查看>>
判偶不判奇
查看>>
Sequelize 数据库的支持
查看>>
BigDecimal类的加减乘除
查看>>
lighttpd中实现每天一个访问日志文件
查看>>
node.js发送邮件email
查看>>