​Handsontable11.0.0:React、Angular和Vue的模塊化

2021-12-22 哲想軟體

我們剛剛發布了Handsontable11.0.0.這個版本為框架包裝器增加了模塊化功能,改進了monorepo結構,增加了一個新的locale選項,等等。

ReactAngularVue的模塊化

模塊化是一種很好的方式,可以專注於對你重要的功能,定製你的網格,並減少你的應用程式的大小。

自從Handsontable8.3.0以來,你已經能夠在Handsontable的vanillaJavaScript版本中使用模塊。現在,你也可以在Handsontable的每個框架版本(React、Angular和Vue)中使用模塊。

雖然這對我們所有的React、Angular和Vue用戶來說是個好消息,但這也是一個突破性的變化,因為你現在需要導入你想要使用的每個模塊。例如,要導入UndoRedo插件的模塊:

//import the `handsontable/base` module

importHandsontable from 'handsontable/base';

//import the `UndoRedo` module and the `registerPlugin()` function

import{

registerPlugin,

UndoRedo,

}from 'handsontable/plugins';

//register the `UndoRedo` module

registerPlugin(UndoRedo);

對模塊化不感興趣?不要害怕:我們還引入了新的方法,讓你一次性導入和註冊一個特定類別的所有模塊。

要了解更多關於Handsontable的模塊,請看我們的文檔。

要了解如何在你的框架中使用模塊,請看其中的一個指南:

在React中使用模塊

在Angular中使用模塊

在Vue中使用模塊

修訂和模塊化的TypeScript定義

自從我們在Handsontable8.3.0中引入模塊化後,我們想讓每個模塊都能完全支持TypeScript。

為了實現這一目標,我們決定刪除龐大的、涵蓋所有TypeScript定義的文件(以前位於根目錄:./handsontable.d.ts)。取而代之的是,我們用一組整齊的小文件(現在位於一個新的目錄:./handsontable/types)取代它,專門用於Handsontable的各個部分。

因此,我們仔細檢查並修改了幾乎所有的Handsontable的類型定義。為什麼這很重要?有幾個原因:

從TypeScript用戶的角度來看,如果你導入整個Handsontable庫,一切都會保持不變。所有的類型定義都在導入Handsontable包時被加載。

importHandsontable from 'handsontable';

新的事情是,現在,當你導入個別模塊時,類型定義也會自動加載,例如:

importHandsontable from 'handsontable/base';

import{ registerPlugin, HiddenRows } from 'handsontable/plugins';

consthiddenRows = Handsontable.plugins.HiddenRows;

更清潔的monorepo結構

在Handsontable8.3.2 中,我們將所有Handsontable版本(JavaScript、Angular、React和Vue)放在一個單一的單一存儲庫中。

現在,為了更輕鬆地管理monorepo,並為Snyk或npm-audit等第三方工具添加更好的支持,我們將Handsontable的主要JavaScript包放置在其自己的專用工作區中。我們將它從根目錄移動到一個新的子目錄:./handsontable,將它放置在與框架包裝器相同的級別:

前:                        後:

如果您計劃為Handsontable的存儲庫做出貢獻,或者您在本地構建自己的Handsontable版本,則此更改可能會影響您。除此之外,它不應以任何方式影響您的應用程式。

關於構建

了解Handsontable的構建過程概覽。

#Monorepo

Handsontable存儲庫(打開新窗口)是一個 monorepo(打開新窗口),其中包含以下項目:

項目

位置

描述

handsontable

./handsontable

Main Handsontable project

@handsontable/angular

./wrappers/angular

Angular wrapper

@handsontable/react

./wrappers/react

React wrapper

@handsontable/vue

./wrappers/vue

Vue 2 wrapper

所有項目都在同一版本號下一起發布。但是每個項目都有自己的構建和測試流程。

#構建過程

構建過程將位於./handsontable/src/目錄中的源文件轉換為以下輸出文件:

./handsontable/dist/handsontable.js

./handsontable/dist/handsontable.css

./handsontable/dist/handsontable.full.js

./handsontable/dist/handsontable.full.css

./handsontable/dist/handsontable.full.min.js

./handsontable/dist/handsontable.full.min.css

./handsontable/dist/languages/*

不要修改上面提到的輸出文件。相反,在 ./handsontable/src/目錄中進行更改,然後運行選定的構建。如果您想通過拉取請求將更改貢獻回Handsontable,這一點尤其重要。

#構建要求

Handsontable構建過程需要:

#package.json 文件

每個Handsontable項目都有自己的構建過程,定義在自己的package.json文件中。除此之外,根目錄也有自己的 package.json文件:

文件

保持構建任務:

./package.json

- 一次所有包
- 單獨包

./handsontable/package.json

JavaScript包

./wrappers/angular/package.json

Angular包

./wrappers/react/package.json

React包

./wrappers/vue/package.json

Vue包

#運行你的第一個構建

要運行您的第一個構建:

1、安裝 Node.js (打開新窗口)(版本 15.11+)。

2、安裝 npm (打開新窗口)(版本 7.17+)。

3、克隆 Handsontable 存儲庫 (打開新窗口)。

4、從根目錄運行 npm install。

5、安裝所有必需的依賴項。

6、從根目錄運行 npm run build。

7、所有 Handsontable 軟體包都已構建。

#構建包

您可以一次構建所有包,也可以單獨構建每個包。

#構建所有包

要一次構建所有包:

1、確保您符合建築要求。

2、進入根目錄。

3、運行 npm run build。

該腳本構建以下包:

JavaScript包

Angular包

React包

Vue包

一個代碼示例包

#構建JavaScript

要構建JavaScript包:

1、確保您符合建築要求。

2、轉到./handsontable。

3、運行 npm run build。

僅構建 JavaScript 包。

從根目錄構建JavaScript包:

1、確保您符合建築要求。

2、進入根目錄。

3、在手動構建中運行 npm run。

僅構建 JavaScript 包。

#JavaScript構建任務

在./handsontable目錄中,您還可以運行單獨的JavaScript構建任務:

JavaScript構建任務

#構建Angular

要構建Angular包:

1、確保您符合構建要求。

2、轉到./wrappers/angular。

3、運行 npm run build。

僅構建 Angular 包。

從根目錄構建Angular包:

1、確保您符合建築要求。

2、進入根目錄。

3、在角度構建中運行 npm run。

僅構建 Angular 包。

#Angular構建任務

從./wrappers/angular目錄,您還可以運行單獨的Angular構建任務:

Angular構建任務

#構建React

要構建React包:

1、確保您符合建築要求。

2、轉到./wrappers/react。

3、運行 npm run build。

只有 React 包構建。

從根目錄構建React包:

1、確保您符合建築要求。

2、進入根目錄。

3、在 react build 中運行 npm run。

只有 React 包構建。

#React構建任務

從./wrappers/react目錄,您還可以運行單獨的React構建任務:

React構建任務

#構建Vue

要構建Vue包:

1、確保您符合建築要求。

2、轉到./wrappers/vue。

3、運行 npm run build。

僅構建 Vue 包。

從根目錄構建Vue包:

1、確保您符合建築要求。

2、進入根目錄。

3、在 vue 構建中運行 npm run。

僅構建 Vue 包。

增強的populateFromArray()方法

當populateFromArray()方法的方法參數設置為shift_down或shift_right時,它的工作方式現在有所不同。

之前,當設置為shift_down或shift_right時,populateFromArray()為每行執行單獨的spliceRow操作,或為每列執行單獨的spliceColumn操作。

現在,當設置為shift_down或shift_right時,populateFromArray()會用一個大型操作填充行(或列)。性能上的差異確實令人印象深刻:

如果您使用由每個spliceRow和spliceColumn操作觸發的beforeChange和afterChange掛鈎,則需要適應這些變化。

新的語言環境選項

為了正確處理基於本地的數據,我們給了Handsontable一個新的配置選項,叫做locale。默認情況下,它被設置為en-US。

到目前為止,我們只使用locale來確保正確過濾土耳其語的自定義搜索輸入,但我們計劃在未來擴大其使用範圍,以進一步定製功能,如過濾、搜索或比較不同的基於本地的數據集。這是改進Handsontable內置國際化功能的一個很好的起點。

你可以為整個網格設置地域選項:

consthot = new Handsontable(container, {
 // set the entire grid'slocale to Turkish
 locale: 'tr-TR',
});

但是您也可以為單個列設置它:

consthot = new Handsontable(container, {
 columns: [
   {
    // set the first column's locale to Polish
     locale:'pl-PL',
   },
   {
     // set the second column'slocale to German
     locale: 'de-DE',    
   },
  {
     // set the third column's locale to Japanese
    locale: 'ja-JP',
   },
 ],
});

要了解更多信息,請參閱Handsontable文檔。

更新文檔

正如所承諾的,我們會不斷改進Handsontable的文檔。自上一個 Handsontable版本以來,我們對API參考的選項部分進行了徹底檢查,重寫了一些指南(例如構建),重新構建了一些其他指南(例如模塊),添加了全新的指南(例如React模塊),添加了一些新的部分現有指南(例如語言環境設置)等。

遷移指南

由於我們引入了一些向後不兼容的更改,因此我們準備了一份遷移指南,引導您逐步從Handsontable10 升級到Handsontable11。

1步:ReactAngularVue——註冊你的模塊

從Handsontable11.0.0 開始,React包裝器、Angular包裝器和Vue包裝器支持模塊化。

如果您不使用任何包裝器,則無需更改任何內容。

#使用所有模塊

要繼續將所有Handsontable模塊與您的包裝器一起使用,請使用新的registerAllModules()方法註冊所有模塊。

在應用程式的入口點文件中,添加以下代碼:

//import the registerAllModules() methodimport{registerAllModules }from'handsontable/registry';

//register all Handsontable modulesregisterAllModules();

#使用單個模塊

要開始在您的包裝器中使用單個Handsontable模塊,請參閱以下指南:

在 React 中使用模塊

在 Angular 中使用模塊

在 Vue 中使用模塊

#2步:適應TypeScript定義文件的更改

以前,Handsontable的所有TypeScript定義都保存在一個大文件中,放在根目錄中:./handsontable.d.ts。

現在,每個模塊都有自己的TypeScript定義文件。它們都保存在一個新的類型目錄中:./handsontable/types(打開新窗口)。

有關更多詳細信息,請參閱此拉取請求(打開新窗口)。

#3步:適應populateFromArray()方法的更改

當populateFromArray()方法的方法參數設置為shift_down或shift_right時,它的工作方式現在有所不同。

#

populateFromArray() 為每個填充的行執行單獨的 spliceRow 操作,並為每個填充的列執行單獨的 spliceColumn 操作。

beforeChange 和afterChange 鉤子被多次觸發,分別針對每個填充的行和列。

beforeChange 和 afterChange 掛鈎由每個 spliceRow 和 spliceColumn 操作觸發,源參數定義為 spliceRow 或 spliceCol。

newHandsontable(element,{

afterChange:(changes,source)=>{

  if(source==='spliceRow'||source ==='spliceCol'){

    handleChange(changes[0]);

  }

}});

#現在

populateFromArray() 用一個大的操作填充行和列。

beforeChange 和 afterChange 鉤子只被觸發一次,對於所有填充的行和列。

beforeChange 和 afterChange 鉤子由 populateFromArray() 方法直接觸發,源參數定義為 populateFromArray。

newHandsontable(element,{

afterChange:(changes,source)=>{

  if(source==='populateFromArray'){

    changes.forEach(change=> handleChange(change))

  }

}});

發行說明:我們添加的內容

為 Handsontable 的模塊化版本添加了 TypeScript 定義文件。 #7489 [突破性變化]

Vue:向 Vue 包裝器添加了對模塊化的支持。 #8820 [突破性變化]

React:為 React 包裝器添加了對模塊化的支持。 第8819章【破變】

Angular:添加了對 Angular 包裝器的模塊化支持。 #8818 [突破性變化]

添加了一個新的包入口點,允許在一個函數調用中導入內置模塊:import { registerAllEditors, registerAllRenderers, registerAllValidators, registerAllCellTypes, registerAllPlugins } from 'handsontable/registry'。 #8816

添加了新的語言環境選項,以正確處理基於語言環境的數據。 #8897

添加了 GitHub 操作工作流程,其中涵蓋了測試 Handsontable 和包裝器。 #8652

添加了新的方向助手,為未來的 RTL 支持奠定了基礎。 #8868

發行說明:我們改變了什麼發行說明:我們修復的內容

修復了使用下拉菜單中的搜索輸入時基於區域設置的數據過濾不正確的問題。 第6095章

修復了使用 populateFromArray() 方法並將其方法參數設置為 shift_right 時拋出的錯誤。 第6929章

修復了 beforeOnCellMouseDown 和 afterOnCellMouseDown 掛鈎使用錯誤坐標的問題。 #8498

修復了在 Handsontable 的模塊化版本中調用 updateSettings() 方法時拋出的類型錯誤。 #8830

修復了文檔的 canonicalUrl 條目的兩個問題。 #8886

修復了當自動填充的來源是日期單元格時拋出的錯誤。 #8894

React:修復了一個 React 包裝器問題,即無法在跨多列重複使用的編輯器組件中使用不同的 props。 #8527

相關焦點

  • 分享vue angular react三大框架實戰課程
    我剛好有《vue angular react三大框架實戰課程》這個課程想要分享給你請加微信:jojoboy020或QQ:694579664(小君老師)領取《 分享vue angular react三大框架實戰課程》
  • Vue、React、Angular三大框架對比與使用心得
    其實在vue 中使用的就是vue-template-compiler這個模板編譯工具, 那這個工具做了什麼呢?4.多端跨平臺實現由於RN的加持,搞定react的語法之後,你甚至就可以去手擼一個app,這裡vue 是做不到的 ,也正是因為這樣,你會發現,在react 中的事件是自己寫的,而不是用的瀏覽器原生的,就是因為他需要用自己寫的這一套合成事件的機制來實現跨端事件,原理其實很簡單
  • Angular vs React vs Vue:2021年,應該選擇哪個框架
    >2013年2014年官方網站angular.ioreactjs.orgvuejs.org當前版本1117.x3.0.x使用者谷歌、維克斯臉書、優步阿里巴巴、GitLab在使用開源框架之前,請確保通過其許可。
  • Vue、React、Angular之三國殺,web前端入坑第六篇(上)
    vue、react、angular對比和選擇 這個話題我在vue1.x 時代 2016年 就想寫了,可時光如梭,懶癌侵身,一個擱淺便是這麼多天。vue都2.5了,angular 都變成了另外一種框架了,不敢想,不敢想, JavaScript 開發框架發展的是如此之快。如果有不知道mvvm概念的同學,請先回顧我 入坑第五篇: 秒懂前端框架歷史和MVVM框架原理!
  • Vue.js 作者回應『Angular有哪些地方比Vue更優秀?』
    看起來大漠連 vue-cli 生成的項目都沒跑過就急著寫文章了呢。其次,CLI 命令/參數多 = 更優秀?並沒有這樣的道理,create-react-app 估計要哭暈在廁所了。如果我們仔細看看文中的截圖,ng build 的多個參數,其實就是對應不同的底層 webpack 配置。
  • Vue、React和Angular:該選擇哪個框架?
    React 最新版本為 16.13.0,於 2020 年 2 月 26 日發布。 Vue.js Google 前僱員 Evan You 在與 Angular 合作多年後,決定 自己 創建一個輕量級框架,其中將包含上述框架的最佳特性。
  • Vue、React 和 Angular:該選擇哪個框架?
    React 最新版本為 16.13.0,於 2020 年 2 月 26 日發布。Vue.jsGoogle 前僱員 Evan You 在與 Angular 合作多年後,決定 自己 創建一個輕量級框架,其中將包含上述框架的最佳特性。 新框架 Vue.js 於 2014 年 2 月開源 ,從那時起,Vue.js 就獲得了極高的人氣。
  • 三個JavaScript框架重量級:Angular,React和Vue
    在這篇文章中,我們提出了一個使用三種不同框架開發三次的開源參考應用程式:React,Vue和Angular。作為Keyhole顧問,我們面臨著從客戶項目到客戶項目的大量技術堆棧和實施。特別是對於我們的企業客戶,必須非常謹慎地選擇最適合公司技術需求和當前環境的技術。
  • React Hooks 與Vue3.0 Function based API的對比?
    當使用 useState Hook 實現上述需求時:import React, { useState } from 'react';function Example() { const [count, setCount] = useState(0); return ( <div> <p
  • React、Angular和Vue三種最流行的前端框架哪一個最好?
    它由Google開發和維護。這是第一次在2010年10月發布,但已經經歷了幾次更新,目前正在對角6 角被描述為「Superheroic的JavaScript框架MVW」角使用由谷歌,維克斯,weather.com,福布斯,和其他人。Vue是當今世界上發展最迅速的JavaScript框架之一。Vue被描述為「用於構建交互式界面的直觀,快速和可組合的MVVM」。
  • vue-element-admin 4.0.0 正式版發布
    element-ui v2.7.0 開始支持tree-table,所以不再獨立維護。 適配 webpack5:webpack5 還是解決了不少之前的痛點的,正式版發布之後會進行升級 vue 3.0: 等官方發布之後會基於新版本進行重構The v4.0 version was officially released.
  • 前端框架Vue、angular、React大PK
    angularJS的特性如下:1.良好的應用程式結構2.雙向數據綁定3.指令4.HTML模板5.可嵌入、注入和測試1.  模板功能強大豐富,自帶了極其豐富的angular指令。2.是一個比較完善的前端框架,包含服務,模板,數據雙向綁定,模塊化,路由,過濾器,依賴注入等所有功能;3. 自定義指令,自定義指令後可以在項目中多次使用。4. ng模塊化比較大膽的引入了Java的一些東西(依賴注入),能夠很容易的寫出可復用的代碼,對于敏捷開發的團隊來說非常有幫助。
  • 【建議收藏】11+實戰技巧,讓你輕鬆從Vue過渡到React
    來源:SegmentFault  思否社區前言在這個卷神輩出的時代,只是熟練Vue的胖頭魚,已經被毒打過多次了,面試中曾被質疑:「你居然不會React?」我無語凝噎,不知說啥是好。這篇文章嘗試將Vue中一些常見的功能在React中實現一遍,如果你恰巧是Vue轉React,或者React轉Vue,期待對你有些幫助。
  • 前端諸神大戰,Vue、React 依舊笑傲江湖
    毫無疑問,現在基本上是 React、Angular(包括 AngularJS 和後來的 Angular)和 Vue.js 三分天下。那麼 2021 年了,在面臨新項目時,開發人員該如何選擇呢?本文將從如下幾個方面比較三個框架,希望能助你一臂之力。
  • 如何用純css打造類materialUI的按鈕點擊動畫並封裝成react組件
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫前言作為一個前端框架的重度使用者,在技術選型上也會非常注意其生態和完整性.筆者先後開發過基於vue,react,angular等框架的項目,碧如vue生態的elementUI
  • Vue3.0新特性
    的優化Componsition API(API組合)ref 和 reactivecomputed 和watch新的生命周期函數自定義函數--hooks函數Teleport - 瞬移組件的位置Suspense - 異步加載組件的新福音全局API
  • vue高級進階系列——用typescript玩轉vue和vuex
    說的簡單點就是對vue的狀態進行統一管理,如下圖介紹了其管理模式:最簡單的使用方法長這樣的:// 如果在模塊化構建系統中,請確保在開頭調用了 Vue.use(Vuex)const store = new Vuex.Store({state: {count: 0},mutations: {increment
  • 前端框架 Angular 11.0.0 正式發布,不再支持 IE 9 、10
    前端框架 Angular 11.0.0 正式發布。
  • 我在 react 裡寫 vue3 ? 還寫了自定義 hooks 和 Hoc 構建了響應式 !
    正式發布之後,vue3.0核心響應式部分被單獨抽離成@vue/reactivity包,也就是說,我們可以脫離vue框架之外,單獨使用@vue/reactivity做一些其他的愉快的事 😊,於是乎筆者突發奇想,為何不用@vue/reactivity在react中,構建響應式,省著每次調用this.setState,useState,直接通過改變state值,做到更新視圖。
  • 一名 Vue 程式設計師總結的 React 基礎
    vue mixins 相同,都是為了解決代碼復用的問題,但 react 中已經廢棄 mixins,vue 中也不推薦使用。高階組件其實就是處理 react 組件的函數,簡單理解就是和 ES6 中提供的 export/import 作用相似,不同點在於:高階組件會進行加工後再導出你需要的東西。類似於方程式:y = ax + b, x 是入口(組件),會根據 a 和 b 進行計算,得到最終的 y(處理後的組件) 給到你用。