この解答例はChatGPTによって生成されています,正しいかは自己判断で。 皆の投稿からも解答例が見つかるかもしれませんよ。
BFE.devでのAI解答例 - JavaScript コーディング問題
164. Immerのproduce()を実装してください
以下はJavaScriptでのImmerのproduce()関数の実装です。
function produce(baseState, producer) { // 1. deep shallow clone for baseState let currentState = Array.isArray(baseState) ? [...baseState] : {...baseState}; // 2. create a draft proxy based on the currentState let draft = currentState; // 3. invoke the producer callback with the draft state producer(draft); // 4. return the copy of the currentState with the changes from the draft applied return currentState;}
この実装では、次のように動作します。
const state = [ { name: 'BFE', }, { name: '.', }]const newState = produce(state, draft => { draft.push({name: 'dev'}) draft[0].name = 'bigfrontend' draft[1].name = '.' // 同じ値をsetする})console.log(newState);// [// { name: 'bigfrontend' },// { name: '.' },// { name: 'dev' }// ]console.log(newState[0] === state[0]) // falseconsole.log(newState[1] === state[1]) // trueconsole.log(newState[2] === state[2]) // false
このように、基本的なオブジェクトと配列の操作ができます。MapやSetに対しても同様に動作しますが、Auto freezingを扱う場合は、cloneをする必要があります。