跳至主要內容

xxx xxx

const createGlobalReactive = (id = "", prefix = "gr-") => {
    if(id[0] == "#")id = id.replace('#','');
    const _root = id ? document.getElementById(id) : document;
    if(!_root)throw new Error(`The id '${id}' you give to the globalReactive app is invalid as it can't find the root element!`);
    const nodes = {_root};
    _root.querySelectorAll('*').forEach(n => {
        n.classList.forEach(c =>{
            if (c.startsWith(prefix)) {
                const key = c.replace(prefix,'');
                if(nodes[key]){
                    nodes[key].push(n);
                }else{
                    nodes[key] = [n];
                }
            }
        })
        if(n.id.startsWith(prefix))nodes[n.id.replace(prefix,'')] = n;            
    })    
    const effects = [];
    const data = {};
    const getData = (key) => data[key];
    const setData = (key, value) => {
        if(data[key] == value)return;
        data[key] = value;
        reactTo(key);
    }
    const useData = (key, initValue) => {
        data[key] = initValue;
        return [() => getData(key), (value) => setData(key,value)];
    }    
    const func = (fn) => {fn(setData,{...data},nodes,id)};
    const useEffect = (fn, deps) => {
        if(!Array.isArray(deps))throw new Error('Effect dependencies are mandatory and have to be in an array!');
        effects.push({fn, deps});
        document.addEventListener('DOMContentLoaded', ()=>{
            func(fn);
        });
    }    
    const reactTo = (key) => {
        effects.forEach(ef => {
            const {fn, deps} = ef;
            if(!key || deps.includes(key)){
                func(fn);
            }
        })  
    }
    return { useData, getData, setData, useEffect, reactTo, nodes, id };
}

留言

此網誌的熱門文章

What這個字怎麼念?

我在美國念大學的時候,有一次我說了這個字what,結果大家都笑了,並且之後有人為了揶揄我,還學我說what的方式。 我在台灣英文學到高中,大學學測英文滿級分,托福也考過了,卻連what一個字都念不好。 經過研究,多數美國人what是念whut,也就是嘴巴不用張大,輕輕的帶過搭u這個音。 這邊的u音是想說的but或是up裡面的u,輕輕短短的。 What不要念成whaaat,這邊的a不是"阿",嘴巴張大大的哦。是u像是but。

英文逐步口譯筆記經驗談

這篇文章是我自己在擔任口譯時做筆記的經驗。 逐步口譯筆記重要性 很重要,長逐步口譯,當講者語畢,實際上只能看著筆記要點翻譯,根本不可能回想,講者剛剛說了甚麼,如果筆記沒記到,很有可能會漏翻。 大量符號 長逐步口譯筆記主要使用自己習慣的符號,或是上場前準備時,就先預設一些符號。 轉折語氣別忘記 有時候講者在表述一個論點時,會先以反向論點開始說,然後才轉折語氣,進入重點。我自己是用 but 代表「但是」、「可是」、「然而」。 並列詞 美國人常常用並列詞,也就是列出許多例子來印證一件事。我筆記方式是用一個直線。 像是這個例子,我很喜歡動物,像是貓、狗、鳥類都喜歡。 數字筆記訣竅 聽到當下要用要翻成的語言做筆記,例如 130 thousand,直接記13W。 常用記號

Cors 基礎設定

建立一個 API 伺服器要設定 Access-Control-Allow-Origin,這樣別的網站才能呼叫, Koa  如果適用 Koa,只要做一個 mideleware 設定即可。 app.use(async (ctx, next) => { ctx.set('Access-Control-Allow-Origin', '*'); await next(); }); Express app.use(async (ctx, next) => { res.set('Access-Control-Allow-Origin', '*') }); 如果只允許一個網域呼叫 將 * 換成該網域即可。 如果允許多個網域呼叫 使用 Swich 的方式,先讀取前端傳來得 headers.origin 來決定設定的 access 即可。3 其他設定 另外,還有 Access-Control-Allow-Methods 跟  Access-Control-Allow-Headers 可以設定,舉例來說,最近我做了一個 Koa.js 應用程式,就要設定 Access-Control-Allow-Headers 包括 content-type 才能傳送 post 請求。