import React, { Component } from 'react';
import PropTypes from 'prop-types';
import './First.css';
import $ from 'jquery';
class First extends Component {
constructor(props) {
super(props);
// create a ref to store the textInput DOM element
//每个事件必须绑定后才可以使用
this.myTextInput = React.createRef();
// this.focusFunc = this.focusFunc.bind(this);
// this.getInput = this.getInput.bind(this);
//定义初始状态
this.state = {
message: false,
inputValue: "inputValue...",
divStyle: {
color: 'red',
backgroundColor: 'green'
},
opacity:0.2,
//fetch
usernameF: '',
lastUrlF: '',
//ajax数据
username: '',
lastUrl: ''
}
}
render() {
let hellotext = this.state.message ? 'like' : 'have\'t liked';
return (
<div>
<h1> {this.props.title} </h1>
<hr />
<input type="text" ref="myTextInput" />
<input type="button" value="Focus the textinput!" onClick={this.focusFunc.bind(this)}/>
<p>{ hellotext }</p>
<hr />
<input type="button" onClick={this.getInput.bind(this)} value="互动" />
<p>{ this.state.inputValue }</p>
<hr />
<div style={this.state.divStyle}>this is div!</div>
<div style={{opacity: this.state.opacity}}>this is div2!</div>
<hr/>
<div>
{this.state.usernameF},
{this.state.lastUrlF}
</div>
<hr />
<div>
{this.state.username},
{this.state.lastUrl}
</div>
</div>
);
}
focusFunc() {
this.refs.myTextInput.focus();//获取真实的DOM节点需要使用refs.name
//重新修改状态值,每次修改以后,自动调用 this.render 方法,再次渲染组件。
this.setState({
message: !this.state.message
});
}
getInput(event) {
// alert();
this.setState({
inputValue: event.target.value
});
}
//生命周期
// Mounting:已插入真实 DOM
// Updating:正在被重新渲染
// Unmounting:已移出真实 DOM
componentWillMount() {
console.log('componentWillMount');
fetch(this.props.source)
.then(res => res.json())
.then(
(result) => {
var lastGist = result[1];
this.setState({
usernameF: lastGist.owner.login,
lastUrlF: lastGist.html_url
});
},
// Note: it's important to handle errors here
// instead of a catch() block so that we don't swallow
// exceptions from actual bugs in components.
(error) => {
this.setState({
// isLoaded: true,
// error
});
}
)
}
componentDidMount() {
let self = this;
console.log('componentDidMount');
$.get(this.props.source,function(res){
var lastGist = res[0];
self.setState({
username: lastGist.owner.login,
lastUrl: lastGist.html_url
});
});
}
componentWillUpdate(prevProps, prevState, snapshot) {
// If we have a snapshot value, we've just added new items.
// Adjust scroll so these new items don't push the old ones out of view.
if (snapshot !== null) {
console.log('componentWillUpdate');
}
}
componentDidUpdate(prevProps, prevState, snapshot) {
// If we have a snapshot value, we've just added new items.
// Adjust scroll so these new items don't push the old ones out of view.
if (snapshot !== null) {
console.log('componentDidUpdate');
}
}
componentWillUnmount() {
console.log('componentWillUnmount');
}
}
//设置props的数据类型
First.proTypes = {
title: PropTypes.func,
}
//设置默认props的title值
First.defaultProps = {
title: 'First'
}
export default First;

react的基本使用,及常用填坑的更多相关文章

  1. React Native工作小技巧及填坑记录

    以下是本人在React Native开发工作中使用的一些小技巧,记录一下. 1.从网络上拉取下来的React Native缺少React和React Native库. 终端 1. cd 项目根目录 2 ...

  2. css 填坑常用代码分享

    以下是常用的代码收集,没有任何技术含量,只是填坑的积累.转载请注明出处,谢谢. 因为提交比较麻烦,后来转置github:https://github.com/jsfront/src/blob/mast ...

  3. React Native填坑之旅--Stateless组件

    Stateless component也叫无状态组件.有三种方法可以创建无状态组件. 坑 一般一个组件是怎么定义的: 很久以前的方法: const Heading = createClass({ re ...

  4. React Native填坑之旅--与Native通信之iOS篇

    终于开始新一篇的填坑之旅了.RN厉害的一个地方就是RN可以和Native组件通信.这个Native组件包括native的库和自定义视图,我们今天主要设计的内容是native库方面的只是.自定义视图的使 ...

  5. React Native填坑之旅--Flow篇(番外)

    flow不是React Native必会的技能,但是作为正式的产品开发优势很有必要掌握的技能之一.所以,算是RN填坑之旅系列的番外篇. Flow是一个静态的检查类型检查工具,设计之初的目的就是为了可以 ...

  6. React Native填坑之旅--重新认识RN

    如同黑夜里的一道光一样,就这么知道了F8. F8是每年一次Facebook每年一次的开发者大会.每次大会都会release相应的APP,iOS.Android都有.之前都是用Native开发的,但是2 ...

  7. React Native填坑之旅--布局篇

    代码在这里: https://github.com/future-challenger/petshop/tree/master/client/petshop/src/controller 回头看看RN ...

  8. React Native填坑之旅--Navigation篇

    React Native的导航有两种,一种是iOS和Android通用的叫做Navigator,一种是支持iOS的叫做NavigatorIOS.我们这里只讨论通用的Navigator.会了Naviga ...

  9. React Native填坑之旅--ListView篇

    列表显示数据,基本什么应用都是必须.今天就来从浅到深的看看React Native的ListView怎么使用.笔者写作的时候RN版本是0.34. 最简单的 //@flow import React f ...

随机推荐

  1. 如何给filter添加自定义接口及调用

    本例子是在VirtualCamera的基础上添加的自定义接口用来实现exe控制osd的显示. 1. 接口部分 #ifndef __H_MyFilter__#define __H_MyFilter__# ...

  2. python学习之字典(Dictionary)练习

    Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型 字典中分为键值对 , key 类型需要时被哈希. value 类型可以是 字符串.数字.元组等其他容器模 ...

  3. 二叉树与AVL树

    二叉树 什么是二叉树? 父节点至多只有两个子树的树形结构成为二叉树.如下图所示,图1不是二叉树,图2是一棵二叉树. 图1 普通的树                                    ...

  4. 不为人知的scanf

    这是一篇为老谭洗白的文章 前几天,我见有人在群里说,谭浩强那本书不咋样,还不少错误.我就看了看他发出来的错误 #include<stdio.h> int main(){ int a,b; ...

  5. spring拦截器的简单实现Interceptor

    原文链接:http://lixuanbin.iteye.com/blog/2250100 1. 需求描述 某内部管理系统采用Spring MVC搭建,用户可以登录系统进行CRUD以及其他的一些日常管理 ...

  6. TestLink和RedMine的集成

    1.              TestLink的安装 1.1. TestLink简介 TestLink是一个php语言开发的开源免费的测试管理工具,包括产品测试需求,测试计划,测试用例的创建和执行, ...

  7. Frogger POJ - 2253

    题意 给你n个点,1为起点,2为终点,要求所有1到2所有路径中每条路径上最大值的最小值. 思路 不想打最短路 跑一边最小生成树,再扫一遍1到2的路径,取最大值即可 注意g++要用%f输出!!! 常数巨 ...

  8. UML那些事

    什么是UML?它的全名:Unified Modeling Language,统一建模语言.最近我用到了uml,顺便重温了下这些知识.知乎上有一个讨论话题:uml还有用吗?这个讨论挺有意思的,看完后,受 ...

  9. 画一个DIV并给它的四个角变成圆形,且加上阴影

    <!doctype html><html><head><meta charset="utf-8"><title>无标题文 ...

  10. 10.socket网络编程

    套接字工作流程 先从服务器端说起.服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接.在这时如果有个客户端初始化一个Sock ...