react

最简单实例

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

//
function Test(props) {
  return (
    <div>
      <h1>now :{props.date.toLocaleTimeString()}</h1>
    </div>
  );
}
ReactDOM.render(
  <Test date={new Date()} />,
  document.getElementById('example')
);

生命周期

componentWillMount 在渲染前调用,在客户端也在服务端。

componentDidMount : 在第一次渲染后调用,只在客户端。之后组件已经生成了对应的DOM结构,可以通过this.getDOMNode()来进行访问。 如果你想和其他JavaScript框架一起使用,可以在这个方法中调用setTimeout, setInterval或者发送AJAX请求等操作(防止异步操作阻塞UI)。

componentWillReceiveProps 在组件接收到一个新的 prop (更新后)时被调用。这个方法在初始化render时不会被调用。

shouldComponentUpdate 返回一个布尔值。在组件接收到新的props或者state时被调用。在初始化时或者使用forceUpdate时不被调用。
可以在你确认不需要更新组件时使用。

componentWillUpdate在组件接收到新的props或者state但还没有render时被调用。在初始化时不会被调用。

componentDidUpdate 在组件完成更新后立即调用。在初始化时不会被调用。

componentWillUnmount在组件从 DOM 中移除之前立刻被调用。

JSX

// Ta 既不是字符串也不是 HTML。
// 自定义属性加 data- 前缀,表达式写在花括号 {} 中,class => className ,内联 style 不用写px,注释需要写在花括号中{},JSX 允许在模板中插入数组,数组会自动展开所有成员:

var myStyle = {
    fontSize: 100,
    color: '#FF0000'
};

var elist = [
  <h1>h1h1h1h1</h1>,
  <h2>h2h2h2h2</h2>,
];

const element = <div>
    <h1 data-id = "1" className = "testClass" style = {myStyle}>
        {/*注释...*/}
        Hello, world!
    </h1>;
    {elist}
</div>


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

组件

//函数定义
function HelloWorld(props) {
    return <h1>Hello World!</h1>;
}

//class 定义
class HelloName extends React.Component {
  render() {
    return <h1>Hello {this.props.name}!</h1>;
  }
}

const HelloWorld = <HelloWorld />;
const HelloName = <Hello />;

function allElement() {
    return (
    <div>
        <HelloWorld />
        <HelloName name="wxw" />
    </div>
    );
}

ReactDOM.render(
    allElement,
    document.getElementById('example')
);

State 可变 / Props 不可变

//更新组件的 state, 重新渲染用户界面
function Time(props) {
  return <h2>now: {props.date.toLocaleTimeString()}.</h2>;
}

class TimeName extends React.Component {
  constructor(props) {
    super(props);
    this.state = {date: new Date()};
  }

  componentDidMount() {
    this.interval = setInterval(
      () => this.add(),
      1000
    );
  }

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

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

  render() {
    return (
      <div>
        <h1>Hello, {this.props.name}</h1>
        <Time date={this.state.date} />
      </div>
    );
  }
}

TimeName.defaultProps = {
  name: 'wxw'
};

const element = <TimeName />

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

事件

//html
<button onclick="btnclick()">
  按钮
</button>

//React 
<button onClick={btnclick}>
  按钮
</button>



//html 阻止默认事件 return false
<a href="#" onclick="console.log('点击链接'); return false">
  点击a
</a>

//react 阻止默认事件 preventDefault
function TestEle() {
  function aLink(e) {
    e.preventDefault();
    console.log('链接被点击');
  }

  return (
    <a href="#" onClick={aLink}>
      点击a
    </a>
  );
}

条件渲染

// js   if判断
if(num.length){
    return <h2>{num}</h2>
}else{
    return null
}

// jsx  花括号 + 表达式
{num.length > 0 &&
  <h2>
    {num} 
  </h2>
}

列表

const nums = [1, 2, 3, 4, 5];
const listItems = nums.map((item) =>
  <li key={index}>{item}</li>
);

ReactDOM.render(
  <ul>{listItems}</ul>,
  document.getElementById('example')
);

ref 可以绑定到 render() 输出的任何组件上

<input type="text" ref="myInput" />
var input = this.refs.myInput;
var inputValue = input.value;

其他api

// 使用的时候查询
设置状态:setState
替换状态:replaceState
设置属性:setProps
替换属性:replaceProps
强制更新:forceUpdate
获取DOM节点:findDOMNode
判断组件挂载状态:isMounted
js
JSRUN前端笔记, 是针对前端工程师开放的一个笔记分享平台,是前端工程师记录重点、分享经验的一个笔记本。JSRUN前端采用的 MarkDown 语法 (极客专用语法), 这里属于IT工程师。