React之深入JSX

2018-06-12  本文已影响54人  风之化身呀

注意点

import React from 'react';
const MyComponents = {
  DatePicker: function DatePicker(props) {
    return <div>Imagine a {props.color} datepicker here.</div>;
  }
}
function BlueDatePicker() {
  return <MyComponents.DatePicker color="blue" />;
}

应用联想:一个组件如果有多种状态,且每种状态不太好复用,可以用这种方式做成多个组件

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

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

function Story(props) {
  // 错误!JSX 标签名不能为一个表达式。
  return <components[props.storyType] story={props.story} />;
}

function Story(props) {
  // 正确!JSX 标签名可以为大写开头的变量。
  const SpecificStory = components[props.storyType];
  return <SpecificStory story={props.story} />;
}
<MyComponent message="&lt;3" />
<MyComponent message={'<3'} />

3、默认为true

<MyTextBox autocomplete />
<MyTextBox autocomplete={true} />

4、扩展属性(谨慎使用)

function App1() {
  return <Greeting firstName="Ben" lastName="Hector" />;
}

function App2() {
  const props = {firstName: 'Ben', lastName: 'Hector'};
  return <Greeting {...props} />; // 会把所有属性都传给子组件,造成子组件属性混乱
}
<div>
  My JavaScript variable is {String(myVariable)}.
</div>
// 当 props.message 为空数组时,它会打印0
<div> 
  {props.messages.length &&
    <MessageList messages={props.messages} />
  }
</div>
// 正确
<div>
  {props.messages.length > 0 &&
    <MessageList messages={props.messages} />
  }
</div>
上一篇 下一篇

猜你喜欢

热点阅读