迅速学习React 笔记 day1

突发奇想追个新,选择react当自己小页面的前端。(当然也不是那么新了)
作为一个前端白痴只能从hello world开始一点点写
好在react官方文档极度友好,几个步骤就能搭出来个简易的开发环境,

1.开发环境

安装nodejs

#windows安装 直接再官方下载稳定版的nodejs
https://nodejs.org/en/

2.vscode 及各种插件略

因为不知道用什么插件好,胡乱下载了下面这些个插件

  • Debugger for Chrome
  • ES7 React/Redux/GraphQL/React-Native snippets
  • React Redux ES6 Snippets

Debugger for Chrome这个插件很神奇居然可以debug chrome

3.安装 react

参照这个

https://reactjs.org/docs/create-a-new-react-app.html#create-react-app

npx create-react-app my-app
cd my-app
npm start

4. hello world

react写前端很奇特的方式,和写html js操作dom感受完全不同,感觉有点类似于面向对象编程语言,完全把页面切割成小块,一片一片拼接

ReactDOM.render(
  <h1>Hello, world!</h1>,
  document.getElementById('root')
);

4. JSX表达式

也有些特点 可以定义对象,可以封装dom,dom中还能执行方法,还可以在生成dom的方法中做判断,感觉很灵活

function formatName(user) {
  return user.firstName + ' ' + user.lastName;
}

function getGreeting(user) {
  if (user) {
    return <h1>Hello, {formatName(user)}!</h1>;
  }
  return <h1>Hello, Stranger.</h1>;
}

const user = {
  firstName: 'Harper',
  lastName: 'Perez'
};
//user 不为空Hello, Harper Perez
//user 为空  Hello, Stranger.
const element = getGreeting(user);

ReactDOM.render(
  element,
  document.getElementById('root')
);

//JSX Represents Objects
const element = React.createElement(
  'h1',
  {className: 'greeting'},
  'Hello, world!'
);

const element = {
  type: 'h1',
  props: {
    className: 'greeting',
    children: 'Hello, world!'
  }
};

5. 更新渲染元素

1) 陋比古方法
function tick() {
  const element = (
    <div>
      <h1>Hello, world!</h1>
      <h2>It is {new Date().toLocaleTimeString()}.</h2>
    </div>
  );
  ReactDOM.render(element, document.getElementById('root'));
}

setInterval(tick, 1000);
1) 牛比新方法
class Clock extends React.Component {
  constructor(props) {
    super(props);
    this.state = {date: new Date()};
  }

  componentDidMount() {
    this.timerID = setInterval(
      () => this.tick(),
      1000
    );
  }

  componentWillUnmount() {
    clearInterval(this.timerID);
  }

  tick() {
    this.setState({
      date: new Date()
    });
  }

  render() {
    return (
      <div>
        <h1>Hello, world!</h1>
        <h2>It is {this.state.date.toLocaleTimeString()}.</h2>
      </div>
    );
  }
}

ReactDOM.render(
  <Clock />,
  document.getElementById('root')
);

6 简述组件,Props,State, 生命周期

1)组件

直接用js function

function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

用 es6语法react组件类React.Component

class Welcome extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}

开始渲染&组合,可以看出react最核心的用法应该就是把各种东西组件化了,定义好组件后可以各种组合。还能让组件继承其他组件

function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

function App() {
  return (
    <div>
      <Welcome name="Sara" />
      <Welcome name="Cahal" />
      <Welcome name="Edite" />
    </div>
  );
}

ReactDOM.render(
  <App />,
  document.getElementById('root')
);

ps es6应该是js的一种比较新的语法,暂时不深入研究能写就行,管他es还是js

2)Props

Props 的只读性
引用下官网 props就是定义不可变的值的属性,如果希望可变就用state

Whether you declare a component as a function or a class, it must never modify its own props.

举个栗子🤞

function Avatar(props) {
  return (
    <img className="Avatar"
      src={props.user.avatarUrl}
      alt={props.user.name}
    />
  );
}
3)State

State 类似与面向对象语言的私有变量,如果想做一些对象内可见可变的属性可以用这个,
官方告知了三个使用时的注意点

  1. 不要直接修改state 而是通过setState方法
this.setState({comment: 'Hello'});
  1. State 的更新可能是异步的
    所以不要依赖state属性的值来更新下一个状态
    解决办法

让setState接收一个函数不是对象,更新时可以调用函数。

this.setState((state, props) => ({
  counter: state.counter + props.increment
}));

两个函数作用相同
this.setState(function(state, props) {
  return {
    counter: state.counter + props.increment
  };
});
  1. State 的更新会被合并

举个官方例子

 constructor(props) {
    super(props);
    this.state = {
      posts: [],
      comments: []
    };
  }

  componentDidMount() {
    fetchPosts().then(response => {
      this.setState({
        posts: response.posts
      });
    });

    fetchComments().then(response => {
      this.setState({
        comments: response.comments
      });
    });
  }
4)生命周期方法
  constructor(props) {
    super(props);
    this.state = {date: new Date()};
  }
//渲染后执行
  componentDidMount() {
  }
//卸载时执行
  componentWillUnmount() {
  }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容