美文网首页
Preact X 快捷搬砖

Preact X 快捷搬砖

作者: vavid | 来源:发表于2018-07-17 17:23 被阅读0次

Preact 实现的几个关键目标:

  • 性能:快速与高效的渲染
  • 大小:小,轻 (大约 3.5kb)
  • 效率:高效的内存使用 (对象重复利用, 避免垃圾回收)
  • 可理解性:可以几小时理解框架代码
  • 兼容性:Preact 兼容大部分的 React API。 preact-compat 实现了更多的 react api 兼容

使用

import { h, render, Component } from "preact";
// 类组件
class App extends Component {
  constructor() {
    super();
    this.state = { time: Date.now() };
  }
  render() {
    let time = new Date(this.state.time).toLocaleTimeString();
    return <h1>Hello, world! {time}!</h1>;
  }
}

render(<App />, document.body);
// 函数组件
function MyComponent(props) {
  return <div>My name is {props.name}.</div>;
}

// Usage
const App = <MyComponent name="John Doe" />;

render(App, document.body);  

/**
* Renders: <div>My name is John Doe.</div> 
*/

Preact 与 react 的不同:

1. preact render

在preact中可以这样写:

// Only works in Preact
class Foo extends Component {
  state = { age: 1 };

  render({ name }, { age }) {
    return <div>Name: {name}, Age: {age}</div>;
  }
}

通用写法:

// Works in both Preact and React
class Foo extends Component {
  state = { age: 1 };

  render() {
    return <div>Name: {this.props.name}, Age: {this.state.age}</div>;
  }
}

2. class 和 className 通用

在 preact 可以直接用 class, 更方便

// This:
<div class="foo" />

// ...is the same as:
<div className="foo" />

3. 用 onInput 替代 onChange

// React
<input onChange={e => console.log(e.target.value)} />

// Preact
<input onInput={e => console.log(e.target.value)} />

4. JSX-Constructor

// 以前这么写:
let foo = <div id="foo">Hello!</div>;
// 现在可以这么写:
var foo = h('div', {id:"foo"}, 'Hello!');

或者:

// 以前这么写:
React.createElement(
  'a',
  { href:'/' },
  React.createElement('span', null, 'Home')
);

// 现在可以这么写:
h(
  'a',
  { href:'/' },
  h('span', null, 'Home')
);

/** 
* Renders:<a href="/">Home</a>
*/

Fragment

import { Fragment, render } from 'preact';

function TodoItems() {
  return (
    <Fragment>
      <li>A</li>
      <li>B</li>
      <li>C</li>
    </Fragment>
  )
}

const App = (
  <ul>
    <TodoItems />
    <li>D</li>
  </ul>
);

render(App, container);
// Renders:
// <ul>
//   <li>A</li>
//   <li>B</li>
//   <li>C</li>
//   <li>D</li>
// </ul>

creatRef

class Foo extends Component {
  state = {
    width: 0,
    height: 0,
  };

  ref = createRef();

  componentDidMount() {
    // For safety: Check if a ref was supplied
    if (this.ref.current) {
      const dimensions = this.ref.current.getBoundingClientRect();
      this.setState({
        width: dimensions.width,
        height: dimensions.height,
      });
    }
  }

  render(_, { width, height }) {
    return (
      <div ref={this.ref}>
        Width: {width}, Height: {height}
      </div>
    );
  }
}

Callback Refs

class Foo extends Component {
  ref = null;
  setRef = (dom) => this.ref = dom;

  componentDidMount() {
    console.log(this.ref);
    // Logs: [HTMLDivElement]
  }

  render() {
    return <div ref={this.setRef}>foo</div>
  }
}

setState

this.state = { counter: 0 };
this.setState(prevState => {
  // Alternatively return `null` here to abort the state update
  return { counter: prevState.counter++ };
});

createContext

const Theme = createContext('light');

function ThemedButton(props) {
  return (
    <Theme.Consumer>
      {theme => {
        return <button {...props} class={'btn ' + theme}>Themed Button</button>;
      }}
    </Theme.Consumer>
  );
}

function App() {
  return (
    <Theme.Provider value="dark">
      <SomeComponent>
        <ThemedButton />
      </SomeComponent>
    </Theme.Provider>
  );
}

其它

Forms:https://preactjs.com/guide/v10/forms
Hooks:https://preactjs.com/guide/v10/hooks
context:https://preactjs.com/guide/v10/context

react to preact

针对 preact is not defined 的问题

在 .babelrc 新增:


.babelrc

针对 h is not defined 的问题

在webpack配置文件新增:


webpack 配置文件

相关文章

  • Preact X 快捷搬砖

    Preact 实现的几个关键目标: 性能:快速与高效的渲染 大小:小,轻 (大约 3.5kb) 效率:高效的内存使...

  • 搬砖 ‘搬砖’

    生儿生女有啥差别?听听院子里几位大妈的感慨,张大妈说:生女儿好,不用操心买车买房,生儿子的现在取媳妇都难,车、房、...

  • Bitcoin Elven

    一、我为什么要研究搬砖 原因:穷 二、我是怎么搬砖的 搬砖的形式有很多种,主要就是硬搬砖和对冲搬砖,其中,硬搬砖是...

  • 说说交易市场中的搬砖

    今天来说说咱们币圈朋友经常说的搬砖。当然。此“搬砖”并非是在工地里搬砖哈。而是在交易市场里搬砖。 那这个搬砖怎么搬...

  • [区块链入门必备]第3期-法币搬砖

    法币搬砖是利润最高的搬砖方式,同时也是需要资源最多的搬砖方式。下面介绍两种常见的法币搬砖方式。 中韩法币搬砖 需要...

  • 零风险搬砖套利

    什么是搬砖? 首先我们来举个例子什么是搬砖? 搬砖:搬砖就是通过不同交易平台之间的差价来获利的行为就是搬砖, 在这...

  • 法币搬砖——Zfund量化套利

    法币搬砖是利润最高的搬砖方式,同时也是需要资源最多的搬砖方式。下面介绍两种常见的法币搬砖方式。 中韩法币搬砖 01...

  • 搬砖是这么回事(二)

    六、搬砖 接下来我们开始一一讲解搬砖的几种方式 一、传统我们先从传统搬砖开始 传统的搬砖也就是跨平台的搬砖 也就是...

  • xtradechain机器人搬砖套利

    什么是搬砖套利,btc怎么搬砖,交易所搬砖套利,xtradechain智能机器人搬砖套利,量化交易套利,外汇套利,...

  • 搬砖

    搬砖 文/张福莲 身体好搬砖无所谓 不舒服分秒也忧虑 闷热天气搬砖累累 搬砖工种陪机器臂 搬砖人个个呼吁 这老天呀...

网友评论

      本文标题:Preact X 快捷搬砖

      本文链接:https://www.haomeiwen.com/subject/qosgpftx.html