How to use take in redux-saga

php中世界最好的语言
Release: 2018-03-17 13:28:15
Original
1476 people have browsed it

This time I will show you how to use take in redux-saga. What are theprecautionswhen using take in redux-saga. Here are practical cases, let’s take a look.

Bring me an API usage method that I have studied for a long time.

The take API usage method in the effect in redux-saga is mostly used for call, put, and select, but the take method is more common. I really don’t have a chance to use it, and I don’t know where to use it. Anyway, since it is written by redux-saga, there must be its usage. No matter 37 21, learn how to use it first.

Let’s take a look at the introduction first:

take

take’s performance is the same as takeEvery, it monitors an action, but unlike takeEvery, it is not triggered every time the action is triggered. All correspond, but the corresponding action will only occur when the execution sequence reaches the take statement.

When using the take statement in the genetator to wait for an action, the generator is blocked, waiting for the action to be distributed, and then continues execution.

takeEvery just listens to each action and then executes the processingfunction. takeEvery has no control over when and how to respond.

But take is different. We can decide in the generator function when to respond to an action and what to do after an action is triggered.

The biggest difference: take will only respond to the corresponding action when the execution flow is reached, while takeEvery will respond to the action once registered.

The above code:

effects: { * takeDemo1({payload}, {put, call, take}) { }, * takeInputChange({payload}, {put, call, take,takeEvery,takeLatest}) { // yield call(delay,1000); console.log(takeEvery); // for (let i = 0; i < 3; i++) { const action = yield take('takeBlur'}); console.log(action, 'action'); console.log(payload.value); // } }, * takeBlur() { console.log(323) }, }
Copy after login
changeHandle(e){ this.props.dispatch({type:'takeInputChange',payload:{value:e.target.value}}) } blur(){ this.props.dispatch({type:'takeBlur'}) } render() { return ( 

) }
Copy after login

There is an input on the page, bound to two methods, the first is the onchange method, the other is the onBlur method,

When the input value When changing, this function is called through this.props.dispatch({type:'takeInputChange'}), but because the take method is encountered, execution cannot continue (paused). If the take here is replaced by takeEvery is quite different. The function will continue to execute, that is, the following two consoles will execute,

and the method of takeEvery execution is placed in its callback, see the following code

yield takeEvery('takeBlur',()=>{console.log(payload.value)});
Copy after login

What needs to be emphasized is that this function will be triggered every time the input changes, so every time it changes, you will see that the console will print the value in the console.

Next, if the input loses focus, The onBlur method will be executed, and this.props.dispatch({type:'takeBlur'}) is called at this time;

Because the take in takeInputChange has monitored the takeBlur action, it will continue to execute what needs to be executed. Content.

This take has been studied for a long time anyway. I don’t know when this thing can be used.

I believe that after reading the case in this article, you have mastered the method, and more How exciting, please pay attention to other related articles on php Chinese website!

Recommended reading:

How to implement a forced refresh on the WeChat web side after backing off

Set cookie expiration for automatic update and automatic acquisition

How to use the React BootStrap framework

The above is the detailed content of How to use take in redux-saga. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!