官网学习笔记--Advanced Guide

p,pre,span,code,div { font-size: 16px }

一、JSX in Depth

1.1 choosing the type at runtime

import React from ‘react‘;
import { PhotoStory, VideoStory } from ‘./stories‘;

const components = {
  photo: PhotoStory,
  video: VideoStory
};

function Story(props) {
  // Wrong! JSX type can‘t be an expression.
  return <components[props.storyType] story={props.story} />;
}

为了解决这个问题,我们将其赋值给首字母大写的变量

import React from ‘react‘;
import { PhotoStory, VideoStory } from ‘./stories‘;

const components = {
  photo: PhotoStory,
  video: VideoStory
};

function Story(props) {
  // Correct! JSX type can be a capitalized variable.
  const SpecificStory = components[props.storyType];
  return <SpecificStory story={props.story} />;
}

1.2 props in JSX

有多种方法指定JSX的props属性

1)JS表达式

可以传递任何大括号包裹的JS表达式作为props。

<MyComponent foo={1 + 2 + 3 + 4} />

对于MyComponent组件,props.foo属性等于10. if语句和for循环不是JS表达式,因此不能直接用于JSX。

2)字符串

可以传递一个字符串作为prop,因此下面的两条语句是等价的。

<MyComponent message="hello world" />

<MyComponent message={‘hello world‘} />

3)prop默认为true

下面两种表述是等价的

<MyTextBox autocomplete />

<MyTextBox autocomplete={true} />

4)扩展运算符

展开对象的形式,使用...+对象名,React自动看成是多个属性名

var props={
    one:‘123‘,
    two:321
}
<HelloWorld {...props}/>

1.3 children in JSX

在拥有开闭标签的JSX表达式中,开闭标签之间的内容传递给了props.children属性,有多种不同的方法来传递children。

1)字符串

开闭标签之间可以是字符串,因此props.children就是这个字符串

<MyComponent>Hello world!</MyComponent>

在这里props.children=Hello world!

JSX会移除空格,因此下面的几种表述是等价的:

<div>Hello World</div>

<div>
  Hello World
</div>

<div>
  Hello
  World
</div>

<div>

  Hello World
</div>

2)JSX children

你也可以提供更多的JSX元素作为children,这在嵌套组件中很有用:

<MyContainer>
  <MyFirstComponent />
  <MySecondComponent />
</MyContainer>

你可以混合不同类型的children,因此你可以混合使用字符串和JSX children

<div>
  Here is a list:
  <ul>
    <li>Item 1</li>
    <li>Item 2</li>
  </ul>
</div>

3)javascript children

可以使用任何大括号括起来的JS表达式作为children,比如下面这两种表述是相同的

<MyComponent>foo</MyComponent>

<MyComponent>{‘foo‘}</MyComponent>

这通常用于呈现JSX任意长度列表,比如下面这种呈现一个HTML列表

function Item(props) {
  return <li>{props.message}</li>;
}

function TodoList() {
  const todos = [‘finish doc‘, ‘submit pr‘, ‘nag dan to review‘];
  return (
    <ul>
      {todos.map((message) => <Item key={message} message={message} />)}
    </ul>
  );
}

JS表达式还可以跟其他类型的children一起混用,这通常用于字符串模板

function Hello(props) {
  return <div>Hello {props.addressee}!</div>;
}

4)函数

props.children可以传递任何数据,比如你有一个custom组件,你可以使用一个回调函数作为props.children.

function ListOfTenThings() {
  return (
    <Repeat numTimes={10}>
      {(index) => <div key={index}>This is item {index} in the list</div>}
    </Repeat>
  );
}

// Calls the children callback numTimes to produce a repeated component
function Repeat(props) {
  let items = [];
  for (let i = 0; i < props.numTimes; i++) {
    items.push(props.children(i));
  }
  return <div>{items}</div>;
}

5)booleans,null,undefined are ignored

false,true,null,undefined都是合法的children,他们只是不渲染,下面这些表达式将渲染成同样的

<div />

<div></div>

<div>{false}</div>

<div>{null}</div>

<div>{true}</div>

当需要有条件的渲染某个react组件时,这是很有用的,

<div>
  {showHeader && <Header />}
  <Content />
</div>
时间: 2024-12-17 07:34:10

官网学习笔记--Advanced Guide的相关文章

React官网学习笔记

欢迎指导与讨论 : ) 前言 本文主要是笔者在React英文官网学习时整理的笔记.由于笔者水平有限,如有错误恳请指出 O(∩_∩)O 一 .Tutoial 篇 1 . React的组件类名的首字母必须是大写  var Comment = React.creatClass({..})  class Comment extends Component(){...} 2 . 我们需要往一个对象里传入一些方法,并把这个对象以参数的形式传到React.creatClass( )里.其中最重要的方法是ren

官网学习笔记

*,p,pre,span,div,code { font-size: 16px } 一.Introducint JSX 在JSX中插入用户输入是安全的,默认情况下ReactDOM会在渲染前,转义JSX中的任意值,渲染前,所有的值都被转化为字符串形式,这能预防XSS攻击. 二.Components and Props All React components must act like pure functions with respect to their props. 组件中的props都是只

树莓派官网学习记录

树莓派官网学习记录 和GPIO Zero 一起开始 我们将做的 树莓派一侧的排针是称为通用输入输出引脚(GPIO) 这些引脚允许树莓派去控制现实中的东西.你能连接元件到这些引脚上:输出设备像能任意被开关的LED(发光二极管):或者是输入设备像能用作触发事件的一个按钮或者传感器,比如当一个按钮被按下的时候,点亮一只LED. 通过使用GPIO Zero 库,你能很容易的控制树莓派的GPIO引脚. 我们将学习的 通过完成这个资源你将学到: 如何将LED和按钮连接到树莓派的GPIO上 如何通过GPIO

4.Knockout.Js官网学习(事件绑定)

前言 click绑定在DOM元素上添加事件句柄以便元素被点击的时候执行定义的JavaScript 函数.大部分是用在button,input和连接a上,但是可以在任意元素上使用. 简单示例 <h2>ClickBind</h2> <div> You've clicked <span data-bind="text: numberOfClicks"></span> times <button data-bind="

Knockout.Js官网学习(系列)

1.Knockout.Js官网学习(简介) 2.Knockout.Js官网学习(监控属性Observables) Knockout.Js官网学习(数组observable) 3.Knockout.Js官网学习(visible绑定) Knockout.Js官网学习(text绑定) Knockout.Js官网学习(html绑定.css绑定) Knockout.Js官网学习(style绑定.attr绑定) 4.Knockout.Js官网学习(click绑定) Knockout.Js官网学习(event

【Spark深入学习 -16】官网学习SparkSQL

----本节内容-------1.概览        1.1 Spark SQL        1.2 DatSets和DataFrame2.动手干活        2.1 契入点:SparkSession        2.2 创建DataFrames        2.3 非强类型结果集操作        2.4 程序化执行SQL查询        2.5 全局临时视图        2.6 创建DataSets        2.7 与RDD交互操作        2.8 聚集函数3.Sp

GraphX学习笔记——Programming Guide

学习的资料是官网的Programming Guide https://spark.apache.org/docs/latest/graphx-programming-guide.html 首先是GraphX的简介 GraphX是Spark中专门负责图和图并行计算的组件. GraphX通过引入了图形概念来继承了Spark RDD:一个连接节点和边的有向图 为了支持图计算,GraphX引入了一些算子: subgraph, joinVertices, and aggregateMessages等 和 

vagrant 慕课网 学习笔记

搭建一个环境,不需要重复配置,直接利用vagrant复制就可以了 vagrant 和 virtualbox 的版本必须匹配, 不匹配的话可能会出很多未知的错误 搭配问题可以去官网查看 所有源码在 githup.com/apanly/mooc 如果不能FQ 就请访问 git.oschina.net/apanly/mooc 安装git sudo apt-get install git http://www.imooc.com/video/14218 3-5 vagrant ThinkPHP5运行环境

1.Knockout.Js官网学习(简介)

前言 最近一段时间在网上经常看到关于Knockout.js文章,于是自己就到官网看了下,不过是英文的,自己果断搞不来,借用google翻译了一下.然后刚刚发现在建立asp.net mvc4.0的应用程序的时候,建完之后我直接在项目的Scripts中看到了这两个js类库,用谷歌翻译看了下官网,Ko的实现原理是MVVM,比MVC高级一些. 简介MVVM模式 MVVM是Model-View-ViewModel的简写. WPF的数据绑定与Presentation Model相结合是非常好的做法,使得开发