npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

babel-plugin-jsx-advanced

v1.1.5

Published

A babel plugin for jsx advanced Features

Downloads

22

Readme

babel-plugin-jsx-advanced

npm package

jsx指令扩展和标签扩展,兼容babel 6.x 和 7.x

安装

$ npm i --save-dev babel-plugin-jsx-advanced

修改babel配置

常见React项目配置

babel.config.js

module.exports = {
  plugins: [
    [
      'babel-plugin-jsx-advanced', 
      {
        // ... 可选配置参数
      }
    ]
  ]
};

config-overrides.js

const {
  override,
  addBabelPlugins
} = require('customize-cra');

module.exports = override(
  ...addBabelPlugins(
    [
      'babel-plugin-jsx-advanced',
      {
        // ... 可选配置参数
      }
    ]
  )
)

ice.config.js

module.exports = {
  chainWebpack(chainedConfig) {
    chainedConfig.module
      .rule('jsx')
      .use('babel-loader')
      .tap((options) => {
        options.plugins.push(
          [
            'babel-plugin-jsx-advanced', 
            {
              // ... 可选配置参数
            }
          ]
        );
        return options;
      });
  }
}

修改eslint配置

.eslintrc

{
  "extends": [
    "plugin:jsx-advanced/recommended"
  ]
}

如果修改了 prefixelifAlias,需要同步修改eslint配置

{
  "settings": {
    "jsx-advanced": {
      "prefix": "v-",
      "elifAlias": "else-if"
    }
  },
  "extends": [
    "plugin:jsx-advanced/recommended"
  ]
}

配置参数详情

  • prefix - 指令前缀,默认为'x-'

  • elifAlias - elif标签或者指令别名,如:修改为'else-if',默认为'elif'

  • classHelper - ${prefix}class指令的辅助函数路径,默认为'celia.classnames'

  • forHelper - ${prefix}for指令的辅助函数路径,默认为'babel-plugin-jsx-advanced/for-helper'

  • showHelper - ${prefix}show指令的辅助函数路径,默认为'babel-plugin-jsx-advanced/show-helper'

  • supportIfTag - 是否支持<if>/<elif>/<else>标签,默认开启;

  • supportFor - 是否支持${prefix}for指令,默认开启;

  • supportIf - 是否支持${prefix}if指令,默认开启;

  • supportClass - 是否支持${prefix}class指令,默认开启;

  • supportShow - 是否支持${prefix}show指令,默认开启;

  • supportHtml - 是否支持${prefix}html指令,默认开启;

  • classHelperAlias - ${prefix}class指令的辅助函数变量名,默认为'__class_helper__'

  • forHelperAlias - ${prefix}for指令的辅助函数变量名,默认为'__for_helper__'

  • showHelperAlias - ${prefix}show指令的辅助函数变量名,默认为'__show_helper__'

使用

x-for 指令

基于源数据多次渲染元素或模板块,在使用该指令之值,必须使用特定语法 alias in expression,为当前遍历的元素提供别名

function MyComponent({ items }) {
  return (
    <ul>
      <li x-for={(item, index) in items} key={index}>
        {item}
      </li>
    </ul>
  );
}

x-if 指令

根据表达式的值的 truthiness 来有条件地渲染元素

function MyComponent({ role }) {
  return (
    <>
      <button type="button">新增</button>
      <button type="button">编辑</button>
      <button x-if={role === 'admin'} type="button">删除</button>
    </>
  );
}

x-else 指令

前一个兄弟元素必须包含 x-if 或者 x-elif

function MyComponent({ role, items }) {
  return (
    <>
      <table x-if={role === 'admin'}>
        <thead />
        <tbody>
          <tr x-for={(item, index) in items} key={index}>
            <td>{item}</td>
          </tr>
        </tbody>
      </table>
      <p x-else>
        无权限访问
      </p>
    </>
  );
}

x-elif 指令

前一个兄弟元素必须包含 x-if 或者 x-elif

function MyComponent({ status }) {
  return (
    <>
      <span x-if={status === 0}>初始化</span>
      <span x-elif={status === 1}>准备中</span>
      <span x-elif={status === 2}>发送中</span>
      <span x-elif={status === 3}>接收中</span>
      <span x-elif={status === 3}>完成</span>
      <span x-else>
        异常&nbsp;&nbsp;
        <a href>重试</a>
      </span>
    </>
  );
}

x-class 指令

用于条件渲染 className,不能跟 className 属性共存

function MyComponent({ status, text }) {
  return (
    <>
      <p
        x-class={{
          default: !status,
          success: status === 1,
          error: status === 2,
          warning: status === 3
        }}
      >
        {text}
      </p>
      <p
        x-class={['info', {
          default: !status,
          success: status === 1,
          error: status === 2,
          warning: status === 3
        }]}
      >
        {text}
      </p>
    </>
  );
}

x-show 指令

根据表达式之真假值,切换元素的 display CSS property

function MyComponent({ isShown }) {
  return (
    <p x-show={isShown}>
      内容1
    </p>
  );
}

x-html 指令

更新元素的 innerHTML

function MyComponent({ html }) {
  if (!html) {
    html = '<span>hello</span>';
  }
  return (
    <p x-html={html} />
  );
}

if 标签

根据表达式的值的 truthiness 来有条件地渲染元素,并且不会创建额外的真实DOM

function MyComponent({ role }) {
  return (
    <>
      <button type="button">查看</button>
      <if value={role === 'admin'}>
        <button type="button">新增</button>
        <button type="button">编辑</button>
        <button type="button">删除</button>
      </if>
    </>
  );
}

elif 标签

前一个兄弟元素必须包含 if 或者 elif 标签

function MyComponent({ type }) {
  return (
    <form>
      <if value={type === 1}>
        <input placeholder="用户名" />
        <input placeholder="密码" />
      </if>
      <elif value={type === 2}>
        <input placeholder="用户名" />
        <input placeholder="验证码" />
        <a href>获取验证码</a>
      </elif>
      <elif value={type === 3}>
        <img src="" alt="扫码登录" />
      </elif>
    </form>
  );
}

else 标签

前一个兄弟元素必须包含 if 或者 elif 标签

function MyComponent({ role, items }) {
  return (
    <>
      <if value={role === 'admin'}>
        <div>
          <input />
          <button type="button">查询</button>
          <table>
            <thead />
            <tbody>
              <tr x-for={(item, index) in items} key={index}>
                <td>{item}</td>
              </tr>
            </tbody>
          </table>
        </div>
      </if>
      <else>
        无权限访问
      </else>
    </>
  );
}