


How does the applet detect data through watch and computed
In Vue, computed is a computed property, similar to a filter, that processes data bound to the view and listens for changes. To monitor complex data types, watch needs to use deep monitoring. Both of these can detect data changes on vue. Unlike Vue, the WeChat applet can use watch and computed to make corresponding changes. Only the function this.setData() in the applet can detect data, so every time the data changes in the applet needs to be detected, the function must be manually executed. In addition, the applet can also attach these two functions to detect data changes.
Vue implements data change detection through Object.defineProperty. Injecting all binding operations into the setter of the variable can drive changes in other data when the variable changes. In fact, the implementation in a small program is simpler than in vue, because for the object in data, vue needs to recursively bind each variable in the object to make it responsive. But in the WeChat applet, whether it is an object or a basic type, it can only be changed through this.setData(). In this way, we only need to detect changes in the key value in the data instead of the key in the key value.
Test code:
Page({ data: { test: { a: 123 }, test1: \'test1\', }, onLoad() { computed(this, { test2: function() { returnthis.data.test.a + \'2222222\' }, test3: function() { returnthis.data.test.a + \'3333333\' } }) watch(this, { test:function(newVal) { console.log(\'invoke watch\') this.setData({test1: newVal.a + \'11111111\' }) } }) }, changeTest() { this.setData({ test:{ a: Math.random().toFixed(5) } }) }, })
Now we have to implement the watch and computed methods so that when test changes, test1, test2, and test3 also change. For this reason, a button is added. When this button is clicked , test will change.
The watch method is relatively simple. First, we define a function to detect changes:
function defineReactive(data, key, val, fn) { Object.defineProperty(data, key, { configurable: true, enumerable: true, get: function() { return val }, set: function(newVal){ if (newVal === val)return fn &&fn(newVal) val = newVal }, }) }
Then iterate over the object passed in by the watch function and call the method for each key
function watch(ctx, obj) { Object.keys(obj).forEach(key => { defineReactive(ctx.data, key, ctx.data[key], function(value) { obj[key].call(ctx,value) }) }) }
The parameter here is fn, which is the value of test in the watch method above. Here, the method is wrapped in a layer and bound to context.
Let’s look at computed. This is a little more complicated because we can’t know which variable in data depends on computed, so we can only traverse each variable in data.
function computed(ctx, obj) { let keys =Object.keys(obj) let dataKeys =Object.keys(ctx.data) dataKeys.forEach(dataKey => { defineReactive(ctx.data, dataKey, ctx.data[dataKey]) }) let firstComputedObj =keys.reduce((prev, next) => { ctx.data.$target =function() { ctx.setData({[next]: obj[next].call(ctx) }) } prev[next] =obj[next].call(ctx) ctx.data.$target =null return prev }, {}) ctx.setData(firstComputedObj) }
Explain this code in detail. First call the defineReactive method for each attribute in data. Then calculate the first value of each attribute in computed, which is test2 and test3 in the above example.
computed(this, { test2: function() { returnthis.data.test.a + \'2222222\' }, test3: function() { returnthis.data.test.a + \'3333333\' } })
Here we call the values of test2 and test3 respectively, combine the return value and the corresponding key value into an object, and then call setData(), so that these two values will be calculated for the first time. Here we use The reduce method. Both test2 and test3 depend on test, so when test changes, the corresponding functions in test2 and test3 must be called in its setter function, and these two variables are set through setData.
Mini program storeProvide more online mini programs
Declare a variable to save all the functions that need to be executed when changing, and execute each function when set. Because the value of this.data.test has not changed at this time, use setTimeout to execute again in the next round. Now there is a question, how to add functions to subs. I don’t know if you still remember the two lines of code in reduce we mentioned above. Because when the calculated values of test1 and test2 are calculated for the first time, the getter method of test will be called. This is a good opportunity to inject the function into subs, declare a $target variable on data, and assign the function that needs to be executed. Give this variable, so that you can judge whether there is a target value on data in the getter, so you can push into subs. It should be noted that you need to set the target to null immediately.
Watch has been implemented so far and computed, but it’s not over yet, there’s a problem. When using both at the same time, the key of the object in watch also exists in data, so Object.defineProperty will be called repeatedly on the variable, and the later will overwrite the previous one. Because it is not like vue where the order of calling the two can be determined, we recommend writing computed first and then watch, so that the value in computed can be watched.
Recommendation: " Mini Program Development Tutorial"
The above is the detailed content of How does the applet detect data through watch and computed. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



With the popularity of mobile Internet technology and smartphones, WeChat has become an indispensable application in people's lives. WeChat mini programs allow people to directly use mini programs to solve some simple needs without downloading and installing applications. This article will introduce how to use Python to develop WeChat applet. 1. Preparation Before using Python to develop WeChat applet, you need to install the relevant Python library. It is recommended to use the two libraries wxpy and itchat here. wxpy is a WeChat machine

Mini programs can use react. How to use it: 1. Implement a renderer based on "react-reconciler" and generate a DSL; 2. Create a mini program component to parse and render DSL; 3. Install npm and execute the developer Build npm in the tool; 4. Introduce the package into your own page, and then use the API to complete the development.

Implementing card flipping effects in WeChat mini programs In WeChat mini programs, implementing card flipping effects is a common animation effect that can improve user experience and the attractiveness of interface interactions. The following will introduce in detail how to implement the special effect of card flipping in the WeChat applet and provide relevant code examples. First, you need to define two card elements in the page layout file of the mini program, one for displaying the front content and one for displaying the back content. The specific sample code is as follows: <!--index.wxml-->&l

According to news from this site on October 31, on May 27 this year, Ant Group announced the launch of the "Chinese Character Picking Project", and recently ushered in new progress: Alipay launched the "Chinese Character Picking-Uncommon Characters" mini program to collect collections from the society Rare characters supplement the rare character library and provide different input experiences for rare characters to help improve the rare character input method in Alipay. Currently, users can enter the "Uncommon Characters" applet by searching for keywords such as "Chinese character pick-up" and "rare characters". In the mini program, users can submit pictures of rare characters that have not been recognized and entered by the system. After confirmation, Alipay engineers will make additional entries into the font library. This website noticed that users can also experience the latest word-splitting input method in the mini program. This input method is designed for rare words with unclear pronunciation. User dismantling

How uniapp can achieve rapid conversion between mini programs and H5 requires specific code examples. In recent years, with the development of the mobile Internet and the popularity of smartphones, mini programs and H5 have become indispensable application forms. As a cross-platform development framework, uniapp can quickly realize the conversion between small programs and H5 based on a set of codes, greatly improving development efficiency. This article will introduce how uniapp can achieve rapid conversion between mini programs and H5, and give specific code examples. 1. Introduction to uniapp unia

Implementation idea: Establishing the server side of thread, so as to process the various functions of the chat room. The establishment of the x02 client is much simpler than the server. The function of the client is only to send and receive messages, and to enter specific characters according to specific rules. To achieve the use of different functions, therefore, on the client side, you only need to use two threads, one is dedicated to receiving messages, and the other is dedicated to sending messages. As for why not use one, that is because, only

Mini program registration operation steps: 1. Prepare copies of personal ID cards, corporate business licenses, legal person ID cards and other filing materials; 2. Log in to the mini program management background; 3. Enter the mini program settings page; 4. Select " "Basic Settings"; 5. Fill in the filing information; 6. Upload the filing materials; 7. Submit the filing application; 8. Wait for the review results. If the filing is not passed, make modifications based on the reasons and resubmit the filing application; 9. The follow-up operations for the filing are Can.

1. Open the WeChat mini program and enter the corresponding mini program page. 2. Find the member-related entrance on the mini program page. Usually the member entrance is in the bottom navigation bar or personal center. 3. Click the membership portal to enter the membership application page. 4. On the membership application page, fill in relevant information, such as mobile phone number, name, etc. After completing the information, submit the application. 5. The mini program will review the membership application. After passing the review, the user can become a member of the WeChat mini program. 6. As a member, users will enjoy more membership rights, such as points, coupons, member-exclusive activities, etc.
