How to use the produce function from immer

Find comprehensive JavaScript immer.produce code examples handpicked from public code repositorys.

immer.produce is a function that allows for immutable updates to an object or array in JavaScript, while still providing a mutable interface to work with.

733
734
735
736
737
738
739
740
741
let _self = this;
const currentPageId = this.state.currentPageId;

if (this.state.appDefinition?.pages[currentPageId].components[componentDefinition.id]) {
  const newDefinition = {
    appDefinition: produce(this.state.appDefinition, (draft) => {
      draft.pages[currentPageId].components[componentDefinition.id].component = componentDefinition.component;
    }),
  };
fork icon0
star icon1
watch icon1

+ 39 other calls in file

17
18
19
20
21
22
23
24
25
26
27
28
const Rx = require("rxjs");
const { from, of, timer } = require("rxjs");
const { concatMap, filter, map, take } = require("rxjs/operators");


const Immer = require("immer");
const produce = Immer.produce;


const BLANK = "";
const SPACE = " ";
const ZERO = "0";
fork icon1
star icon0
watch icon1

How does immer.produce work?

immer.produce is a function that takes a base state and a "recipe" function that describes how to modify the state, and returns a new modified state without mutating the original one, by creating a "draft" version of the state and applying the modifications to it.

57
58
59
60
61
62
63
64
65
66
	});
};

this.checklogin = function (req, res) {
	if (typeof req.session.isLogin !== "undefined" && req.session.isLogin === true) {
		return immer.produce(messagePrototype, function (_messagePrototype) {
			_messagePrototype.code = 200;
			_messagePrototype.message = "success";
			_messagePrototype.data = { userName: req.session.userName };
			return _messagePrototype;
fork icon0
star icon0
watch icon1

+ 5 other calls in file

12
13
14
15
16
17
18
19
20
21
22
23
    todo: '22',
    checked: false
  }
];


const nextState = produce(originalState, draft => {
  const todo = draft.find(t=>t.id===2);
  todo.checked = true;


  draft.push({
fork icon0
star icon0
watch icon0

Ai Example

1
2
3
4
5
6
7
8
9
10
import produce from "immer";

const originalObject = { x: 1, y: 2 };

const modifiedObject = produce(originalObject, (draftObject) => {
  draftObject.x = 10;
});

console.log(originalObject); // { x: 1, y: 2 }
console.log(modifiedObject); // { x: 10, y: 2 }

In this example, produce creates a draft copy of originalObject, modifies its x property, and returns the modified copy as modifiedObject. The original object remains unchanged.