加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

React学习笔记

发布时间:2020-12-15 05:16:15 所属栏目:百科 来源:网络整理
导读:??【编码规范】html标记变量用小写开头var myDivElement = div className="foo" /;ReactDOM.render(myDivElement,document.getElementById('example'));React组件用大写开头var MyComponent = React.createClass({/*...*/});var myElement = MyComponent som
??

【编码规范】
html标记变量用小写开头
var myDivElement = <div className="foo" />;
ReactDOM.render(myDivElement,document.getElementById('example'));
React组件用大写开头
var MyComponent = React.createClass({/*...*/});
var myElement = <MyComponent someProperty={true} />;
ReactDOM.render(myElement,document.getElementById('example'));

【JSX原理】
React JSX将一个类似于xml的语法转换成原生态js。xml元素,属性以及子元素都被当成参数传入React.createElement
var Nav;
// Input (JSX):
var app = <Nav color="blue" />;
// Output (JS):
var app = React.createElement(Nav,{color:"blue"});
一个html标记必须对应一个名称相同的变量。

【子元素】
var Nav,Profile;
// Input (JSX):
var app = <Nav color="blue"><Profile>click</Profile></Nav>;
// Output (JS):
var app = React.createElement(
  Nav,{color:"blue"},React.createElement(Profile,null,"click")
);
  
【命名空间组件】
如果你要构建一个含有许多子元素的组件,那就用命名空间组件。
var MyFormComponent = React.createClass({ ... });
MyFormComponent.Row = React.createClass({ ... });
MyFormComponent.Label = React.createClass({ ... });
MyFormComponent.Input = React.createClass({ ... });

var Form = MyFormComponent;

var App = (
  <Form>
    <Form.Row>
      <Form.Label />
      <Form.Input />
    </Form.Row>
  </Form>
);
编译后:
var App = (
  React.createElement(Form,React.createElement(Form.Row,React.createElement(Form.Label,null),React.createElement(Form.Input,null)
    )
  )
);

【属性表达式】
使用js表达式作为属性的值,值用花括号引起来
// Input (JSX):
var person = <Person name={window.isLoggedIn ? window.name : ''} />;
// Output (JS):
var person = React.createElement(
  Person,{name: window.isLoggedIn ? window.name : ''}
);

【Boolean属性】
省略一个属性的值,jsx会把它的值看做是true
// These two are equivalent in JSX for disabling a button
<input type="button" disabled />;
<input type="button" disabled={true} />;

// And these two are equivalent in JSX for not disabling a button
<input type="button" />;
<input type="button" disabled={false} />;

【Child Expressions】
// Input (JSX):
var content = <Container>{window.isLoggedIn ? <Nav /> : <Login />}</Container>;
// Output (JS):
var content = React.createElement(
  Container,window.isLoggedIn ? React.createElement(Nav) : React.createElement(Login)
);

【注释】
var content = (
  <Nav>
    {/* child comment,put {} around */}
    <Person
      /* multi
         line
         comment */
      name={window.isLoggedIn ? window.name : ''} // end of line comment
    />
  </Nav>
);
 
【扩展属性】
  var props = {};
  props.foo = x;
  props.bar = y;
  var component = <Component {...props} />;
  
 【属性覆盖】
 可以给一个元素多次添加相同属性,但是最后一次添加的会覆盖之前的。
 var props = { foo: 'default' };
 var component = <Component {...props} foo={'override'} />;
 console.log(component.props.foo); // 'override'

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读