# Velocity Builder - Figma plugin 影片心得
> 1. 支援的 CSS 使用?
> 2. 會影響設計師的工作職責嗎?(e.g. 像是需要對 Tailwind 或 CSS-in-JS 有多少瞭解?)
> 3. 如何根據商業邏輯調整「UI 設計」與「邏輯切割」?
> 4. 預估會如何使用?是 Figma plugin 嗎?
### 通用各種 Framework & CSS 撰寫方式
- 可以直接在 prompt 提出多方面的改善
- prompt 甚至可以完全靠滑鼠輸出「改善的需求」,UI 上會提供建議
- Pulgin 可以整合 builder.io 的開發 dev web (可以想像像 Storybook 會 build 一個網站),可以讓不同 department 的人「使用非 coding 的方式」同步修改
### 轉化 mitosis 成各種 Framework 的 component
1. 需要有固定格式:
1. export method 固定: export default function Component
2. props 如果直接解構會 parse 錯誤
3. mitosis 的 component 固定要為 Component.lite.(js|jsx|tsx)
2. 提供[各種 hook](https://github.com/BuilderIO/mitosis/blob/403811679ff42b6ead0e76ed70122e8f0a07a85d/docs/hooks.md?plain=1#L18) 來產生對應的互動行為
1. 以 React 來說,要做到 ref 的綁定也有類似的 API
2. onMount 會對應到 沒有 dependencies 的 array、 onUpdate 會對應到有特定 dependencies 的 array
3. useStore 的每一個 object 如果是 primitive value,則會被當作 state,如果是 get 或 function,會被當作 function
3. 官方有提供 [ESLint](https://github.com/BuilderIO/mitosis/tree/main/packages/eslint-plugin) 來確保寫出的 framework component 或 mitosis component 能有效被轉換
### 嘗試 mitosis 轉換出 React Component:
React hook 的使用時機很看重開發者的判斷,它無法很清楚知道 state 要如何 update;目前在支援 useMemo ([issue](https://github.com/BuilderIO/mitosis/issues/857)) 或 useCallback 上還不齊全,期待未來有更符合 React 做 reactive 和 performance 處理的能力。
```ts
// src/components/Person.lite.tsx
function Person() {
const state = useStore({
name: 'Builder',
info: {
name: '',
age: 0
}
})
function updateState(name:string,age:number) {
state.info.name = name
state.info.age = age
}
onUpdate(()=>{
console.log(state.name)
updateState(state.name, 30)
},[state.name])
return <input type='text' onChange={(e)=>{state.name = e.target.value}}/>
}
// output/react/src/components
"use client";
import * as React from "react";
import { useState, useEffect } from "react";
function Person(props) {
const [name, setName] = useState(() => "Builder");
const [info, setInfo] = useState(() => ({
name: "",
age: 0,
}));
// 沒有機制判斷需不需要需要 useCallback,因此會有框架差異
function updateState(name, age) {
// 沒有正確使用 hook
info.name = name;
info.age = age;
}
useEffect(() => {
console.log(name);
updateState(name, 30);
}, [name]);
return (
<input
type="text"
onChange={(e) => {
setName(e.target.value);
}}
/>
);
}
export default Person;
```