Janet Janet

1666672661

Han Wu Jiao Hou

When she heard this, she came from the modern soul and felt that she could not bear it. She thought that she had made a profound analysis of the importance of these two people since she had crossed them, but she had neglected their real and practical needs. She could not help but begin to search for some of Dongmei's situation in her memory carefully. After thinking about it, she did not pause for a moment. She finally sighed feebly and said, "It's my fault that I don't care enough about you on weekdays, so I let the screwdriver take advantage of it with ulterior motives. From now on, I'm your reliance. If you need anything, just talk to me." Holding Xia He, Dongmei quickly knelt down again. Before the two of them could show their loyalty, she added, "Don't say anything superfluous. After a while, Dongmei will send me a message to my elder brother in the palace, asking them to arrange a house for Xia He's grandmother and younger brother near Chang'an City, and give them some fields. When they are well raised, if they want to study, they can rent out the fields." Collecting some rent is also a good way to spend the day. If you have no desire for fame, you can also cultivate your own land to ensure that you have no worries about food and clothing. Xia he where thought, he was not punished, nor just took some medicine money, but thoroughly for their own family to seek the welfare of the rebirth, can not believe the red and swollen eyes looking at Chen Ejiao, Dongmei in the side of the pull her hard, she just reacted from the palpitation, grateful to endure the pain on the forehead, to the slippery floor tiles and hard knock down. But this time, she did not just be a bystander, hurriedly got out of bed to personally lift up Xia He, took the handkerchief handed over by Dongmei, and pressed it on her forehead to stop bleeding. To the winter plum and summer lotus ordered again,stainless steel tube fitting, after they left, simply blew out the candle, easily went to bed covered with the quilt to sleep. XuanShiDian it how noisy, Pingyang princess how play, summer father-in-law and how purpose, including Liu Che is also conniving at the development of the matter, all of this, is nothing more than the idea of her use, add block, please, and all this,needle valve manufacturer, for her main goal, is not worth mentioning. When it's time to pretend to be confused, she pretends to be more like anyone else. However, before she went to sleep, she went through the description of Xia He again in her mind, in which the word Liu lingered in her mind and even brought it to her dream. Chapter 8 Once and Now It's hard to imagine that Liu Fei, who was still the king of Runan at that time, volunteered to be magnificent and courageous, and showed ferocity when he lured and killed the king of Wu, but in his dream, the outline gradually changed from blurred to clear and completely showed another look. She seemed to have returned to her childhood. Since she was ten years old, Liu Fei, who was a little older than her, always sat under the big old locust tree in her favorite garden intentionally or unintentionally, holding a roll of bamboo slips, but his eyes were always smiling at her playing and running, containing everything about her. Even if she did something wrong, his scolding was always soft with boundless spoiling. This feeling is very sweet, very warm, although I know that Liu Fei's gentleness and care is only for the original body, stainless steel hydraulic fitting ,12 needle valve, not from the modern she. However, she still felt grateful and even a little sad. Because she in the dream of this memory, she caught Liu Fei eyes in the gloom and hurt, when he heard the big long princess GuanTao finally decided to her at the age of thirteen and ten prince Liu Che engagement, has been looking forward to oneself can be the queen of her how to cheer, and he is gloomy. At that time, the original body saw, but did not notice, and she, but saw, but also noticed! Pay close attention to it again, it seems to be that year, has always been the character does not like to be too much domination and itself is able to command one side of the Liu Fei, just decided to bow down and become an official, remember at that time, the Han emperor Jing's happy face is still in sight, and she became the queen that day, he, but back to the idle. Flash four years, she became an abandoned woman, jealous woman, and he, was also said to be a good man wind, although not common, but still can feel that he seems to be around at any time and anywhere. However, the heartless original body still understands all this. But why? Why, her sadness as her conclusion became clearer and clearer, and more and more intense, so strong that her chest began to feel stuffy, tears burst out, wet the pillow, straight felt a continuous stream of sadness, so that she could hardly bear it, until the final heartstrings as if they had been cut open by a sword, she gradually woke up from her dream. And slowly regained consciousness in the discomfort of the coolness beside his face. Day has been bright, according to this period of time to see the sky guess time experience, she is sure that she has missed the departure time, just strange, summer lotus and winter plum how not to wake up themselves, sit up quickly, lift the quilt, just to get out of bed, dusk, see Liu Che standing on the right side of the emperor's court clothes did not change to stand on the edge of her head, Perhaps they are both facing the window, she was just looking at the sky and ignore Liu Che in his head. Please after an Ann, see Liu Che tight between the eyebrows there is no sign of easing, in fact, as the queen, how she also want to greet two to table his wife's concern for her husband, but as her, she really don't need to wear understand pretend to be confused, also don't want to ask him what trouble! It's obvious, so don't talk about it any more. Even hypocrisy is not like that. Respectfully again, she immediately called the two maidservants, dressing up, but let her feel strange is that the two maidservants came in the expression is very puzzling, along their staring at their faces, she was curious to throw a smooth face of the bronze mirror, this photo, is really startled. His two eyes were swollen too obviously. Could it be that the sadness in his dream last night was so severe. Turn around again, the two maidservants have to lower their heads to avoid suspicion, manage the hand toiletries,14 tube fitting, to help live finishing matters, and standing aside the emperor Liu Che, the expression is really.. chinaroke.com

What is GEEK

Buddha Community

Janet Janet

1666672661

Han Wu Jiao Hou

When she heard this, she came from the modern soul and felt that she could not bear it. She thought that she had made a profound analysis of the importance of these two people since she had crossed them, but she had neglected their real and practical needs. She could not help but begin to search for some of Dongmei's situation in her memory carefully. After thinking about it, she did not pause for a moment. She finally sighed feebly and said, "It's my fault that I don't care enough about you on weekdays, so I let the screwdriver take advantage of it with ulterior motives. From now on, I'm your reliance. If you need anything, just talk to me." Holding Xia He, Dongmei quickly knelt down again. Before the two of them could show their loyalty, she added, "Don't say anything superfluous. After a while, Dongmei will send me a message to my elder brother in the palace, asking them to arrange a house for Xia He's grandmother and younger brother near Chang'an City, and give them some fields. When they are well raised, if they want to study, they can rent out the fields." Collecting some rent is also a good way to spend the day. If you have no desire for fame, you can also cultivate your own land to ensure that you have no worries about food and clothing. Xia he where thought, he was not punished, nor just took some medicine money, but thoroughly for their own family to seek the welfare of the rebirth, can not believe the red and swollen eyes looking at Chen Ejiao, Dongmei in the side of the pull her hard, she just reacted from the palpitation, grateful to endure the pain on the forehead, to the slippery floor tiles and hard knock down. But this time, she did not just be a bystander, hurriedly got out of bed to personally lift up Xia He, took the handkerchief handed over by Dongmei, and pressed it on her forehead to stop bleeding. To the winter plum and summer lotus ordered again,stainless steel tube fitting, after they left, simply blew out the candle, easily went to bed covered with the quilt to sleep. XuanShiDian it how noisy, Pingyang princess how play, summer father-in-law and how purpose, including Liu Che is also conniving at the development of the matter, all of this, is nothing more than the idea of her use, add block, please, and all this,needle valve manufacturer, for her main goal, is not worth mentioning. When it's time to pretend to be confused, she pretends to be more like anyone else. However, before she went to sleep, she went through the description of Xia He again in her mind, in which the word Liu lingered in her mind and even brought it to her dream. Chapter 8 Once and Now It's hard to imagine that Liu Fei, who was still the king of Runan at that time, volunteered to be magnificent and courageous, and showed ferocity when he lured and killed the king of Wu, but in his dream, the outline gradually changed from blurred to clear and completely showed another look. She seemed to have returned to her childhood. Since she was ten years old, Liu Fei, who was a little older than her, always sat under the big old locust tree in her favorite garden intentionally or unintentionally, holding a roll of bamboo slips, but his eyes were always smiling at her playing and running, containing everything about her. Even if she did something wrong, his scolding was always soft with boundless spoiling. This feeling is very sweet, very warm, although I know that Liu Fei's gentleness and care is only for the original body, stainless steel hydraulic fitting ,12 needle valve, not from the modern she. However, she still felt grateful and even a little sad. Because she in the dream of this memory, she caught Liu Fei eyes in the gloom and hurt, when he heard the big long princess GuanTao finally decided to her at the age of thirteen and ten prince Liu Che engagement, has been looking forward to oneself can be the queen of her how to cheer, and he is gloomy. At that time, the original body saw, but did not notice, and she, but saw, but also noticed! Pay close attention to it again, it seems to be that year, has always been the character does not like to be too much domination and itself is able to command one side of the Liu Fei, just decided to bow down and become an official, remember at that time, the Han emperor Jing's happy face is still in sight, and she became the queen that day, he, but back to the idle. Flash four years, she became an abandoned woman, jealous woman, and he, was also said to be a good man wind, although not common, but still can feel that he seems to be around at any time and anywhere. However, the heartless original body still understands all this. But why? Why, her sadness as her conclusion became clearer and clearer, and more and more intense, so strong that her chest began to feel stuffy, tears burst out, wet the pillow, straight felt a continuous stream of sadness, so that she could hardly bear it, until the final heartstrings as if they had been cut open by a sword, she gradually woke up from her dream. And slowly regained consciousness in the discomfort of the coolness beside his face. Day has been bright, according to this period of time to see the sky guess time experience, she is sure that she has missed the departure time, just strange, summer lotus and winter plum how not to wake up themselves, sit up quickly, lift the quilt, just to get out of bed, dusk, see Liu Che standing on the right side of the emperor's court clothes did not change to stand on the edge of her head, Perhaps they are both facing the window, she was just looking at the sky and ignore Liu Che in his head. Please after an Ann, see Liu Che tight between the eyebrows there is no sign of easing, in fact, as the queen, how she also want to greet two to table his wife's concern for her husband, but as her, she really don't need to wear understand pretend to be confused, also don't want to ask him what trouble! It's obvious, so don't talk about it any more. Even hypocrisy is not like that. Respectfully again, she immediately called the two maidservants, dressing up, but let her feel strange is that the two maidservants came in the expression is very puzzling, along their staring at their faces, she was curious to throw a smooth face of the bronze mirror, this photo, is really startled. His two eyes were swollen too obviously. Could it be that the sadness in his dream last night was so severe. Turn around again, the two maidservants have to lower their heads to avoid suspicion, manage the hand toiletries,14 tube fitting, to help live finishing matters, and standing aside the emperor Liu Che, the expression is really.. chinaroke.com

Wu. Move . *** . Kun

I'm sorry.. I've been lying to you. , I let you enter the ancestral palace to condense the shrine, and force you to cross the triple reincarnation.. I am really a very annoying person to you. "The smile on Ying Huanhuan's cheek was very sad. Her nails were deeply pinched into the palm of her hand, and the ice-blue blood dripped down like ice beads." Shifu said that my power, in fact, does not mean that I can reach the ancestral realm, but that I have the power to help people reach the ancestral realm, this piece of heaven and earth, in fact, can be saved, of course, the premise is that I want to reach the half-ancestral realm. Lin moved clenched his teeth, he stared at Ying Huanhuan, I don't want to be the second Fu Zu, I am a very selfish person, so I don't want to do anything to save heaven and earth, I just want to be with the people I care about, even if everything dies in the end, at least no regrets! Ying Huanhuan looked at Lin Dong, as if she had seen through the surge in his heart. She nibbled her lip and choked: "But..". I just want you to live. 。” I just want you to live. Lin moved like being struck by lightning, vaguely familiar with a sentence, in that many years ago in the magic domain,stainless steel toilet, so desperate, the girl is also so red eyes said to him, simple request, but let Lin move with the pain of being torn heart. What on earth do you want to do? Lin Dong trembled and repeated the sentence again. He stared at Ying Huanhuan and murmured, "Can't you listen to me for once?!" I really don't want to do this.. But is there really any other way? ? In fact, from the beginning, all this is doomed, I simply can not change anything.. Ying Huanhuan's beautiful eyes were red,Self-closing Faucet, and the spray condensed in his eyes. I'm sorry I just want you to live well. 。” Ying Huanhuan stepped back slowly. She shook her head gently. As she stepped back, her long glittering and translucent hair began to turn black gradually. Her ice-blue eyes were once again restored to the darkness and agility of a long time ago. At that moment, the girl who once wore a black ponytail, smiled skillfully and was charming and lively, seemed to appear again. Below the Lord of life and death, they saw such a change in Ying Huanhuan, but his face changed dramatically. Lin Dong also noticed something was wrong. As soon as his body moved, he swept away directly at Ying Huanhuan. Sniff! But just as his body rushed out, the surrounding space was frozen in an instant, the ice formed vines, wrapped around the body of the forest, and then the ice and snow condensed at his feet, turning into a huge ice lotus. That kind of power, even now the forest moves to condense the shrine, through the triple reincarnation plunder is somewhat difficult to resist, Flush valve price ,Stainless Steel Toilet Bowl, although his practice speed is enough to rank in the top three. But his practice time, after all, is too short, this is his greatest weakness, if he can give him some more time, he believes that he will touch the ancestral realm! But he doesn't have time! "Ying Huanhuan!"! If you dare to mess up again, I will never let you go! Lin moved his eyes red and roared. Ying Huanhuan smiled softly at Lin Dong. Her smile was as sad as the snow lotus that was about to disappear on the iceberg, and then her eyes slowly closed. ... When it was so far away. The old man from an iceberg of ten thousand years. A little baby girl came out. The baby girl grew up and became a little girl with a small ponytail. Ice, you have a very strong power, perhaps in a long time later, the master is gone, then the world, need you to guard. The old man smiled at the little girl beside him with a gentle voice. Why isn't the master here? The little girl has a tender voice and big black eyes. Full of naivety and puzzlement. The old man smiled and continued, "It's just that you need to be completely willing to release that power, and you will pay a great price, which may be your life, if at that time.". If you can find a person who makes you willing to pay so much, then please save the life of heaven and earth. The little girl blinked her big eyes and said, "What if I don't find it?"? Why do you want to give your life for others. I don't like it. ” "If you don't find it, it's the doomed disaster of heaven and earth, and the agreement between Shifu and you can't be counted." "Oh.." The little girl took a bite of ice, shook her black ponytail, and gave her life for others? Although she was still young, the coldness deep in her heart made her think that such a thing could not happen. ... "Master..". Final I still found the one who can make me willing to give everything.. Binger is also very happy. ...” Distant memories gushed out from the dust-laden place. Ying Huanhuan muttered to herself in her heart. Immediately, the smile on her pretty face began to warm. Her slender jade hands met gently, as if forming an ancient and incomparable seal. I pray with my soul.. "With my body.." "With my soul.." "With my blood.." The ethereal voice, as if accompanied by the sound of ancient ballads, sounded leisurely in any corner between heaven and earth, the four mysterious realms, the chaotic sea of demons, the demon realm, countless people are raising their heads, as if there is a sense of looking in that direction, a kind of inexplicable shock, gushing out from the depths of their hearts. The spirit of heaven and earth, deification, the road of ancestors! When the last ancient syllable fell, Ying Huanhuan's body suddenly trembled violently, and then the heaven and earth began to tremble, and the sky showed brilliant colors, as if there were countless brilliant lights gushing out from the heaven and earth, and finally turned into millions of feet of brilliant light over the chaotic sea. The inspiration whistled, and finally poured into the huge ice lotus at the foot of the forest, and then the ice lotus began to become gorgeous.. However, Lin Dong did not have time to pay attention to the change of the ice lotus, he looked at Ying Huanhuan in horror, because at this time the latter body, there was an ice blue flame rising up. At this moment, he finally understood what Ying Huanhuan wanted to do,stainless steel squatting pan, she was burning herself, urging her most powerful force to help him become an ancestor, but the price would obviously be her life!. cnkexin.com

Aileen  Jacobs

Aileen Jacobs

1597563660

Deep Learning, Meet Clever Hans

Around 1900, a German farmer made an extraordinary claim: he had taught a horse basic arithmetic, and even to read and spell! Indeed, in public demonstrations, the horse, called Clever Hans, was able to answer all of its owner’s questions correctly, by a sequence of taps of its hooves.

Oskar Pfungst, a psychologist of the time at the University of Berlin, did not quite believe the animal really possessed such human-like capabilities and designed a set of experiments to prove the farmer’s claim wrong. In 1907 he published his famous report on the matter, making a surprising observation: Clever Hans would only give the correct answer if the answer was known by the experimenter asking the question!

#ai #deep-learning #artificial-intelligence #machine-learning #data-science

Hong  Nhung

Hong Nhung

1659602760

Cuộn Vô Hạn Với GraphQL

Khi xây dựng các ứng dụng cung cấp cho người dùng một danh sách dài thông tin, chẳng hạn như nguồn cấp tin tức, bài đăng trong diễn đàn hoặc tin nhắn trong ứng dụng trò chuyện, mục tiêu của chúng tôi là hiển thị một lượng hợp lý thông tin đó cho người dùng.

Ngay sau khi người dùng bắt đầu cuộn qua danh sách ban đầu, ứng dụng khách web sẽ tải thêm nội dung để tiếp tục cung cấp thông tin này cho người dùng. Quá trình này được gọi là cuộn vô hạn.

Hãy tưởng tượng bạn đang xem qua một danh sách tên của tất cả mọi người trên trái đất. Mặc dù danh sách đó không chính xác là vô hạn, nhưng chắc chắn là có cảm giác như vậy. Trình duyệt của bạn có thể sẽ gặp khó khăn trong việc xử lý danh sách hơn tám tỷ mục được ném vào nó từ máy chủ GraphQL.

Điều này tạo ra nhu cầu phân trang. Phân trang trong API GraphQL cho phép khách hàng hoặc giao diện người dùng của chúng tôi truy vấn danh sách các mục trong các phần từ API. Trên giao diện người dùng của chúng tôi, giờ đây chúng tôi có thể xây dựng chức năng cuộn vô hạn.

Bài viết này sẽ thảo luận về khái niệm phân trang trong GraphQL và cách nó hoạt động. Chúng ta sẽ đi sâu vào ý tưởng về tính năng cuộn vô hạn và các ứng dụng, ưu và nhược điểm của nó. Chúng tôi cũng sẽ xem cách chúng tôi có thể kết nối giao diện người dùng Vue của mình với một API GraphQL demo cung cấp danh sách dữ liệu. Cùng với đó, chúng tôi sẽ chứng minh cách chúng tôi có thể triển khai tính năng cuộn vô hạn trên giao diện người dùng của mình để tìm nạp dữ liệu.

Phân trang và cuộn vô hạn

Phân trang là quá trình tách hoặc chia nội dung thành các phần rời rạc được gọi là trang.

Mặc dù những gì chúng tôi đang cố gắng hoàn thành trong bài viết này không liên quan đến việc chúng tôi tạo các trang để hiển thị nội dung, nhưng nó vẫn dựa trên khái niệm chia nội dung thành các phần để tải nó trong khi người dùng cuộn.

Cuộn vô hạn là một trong ba hình thức phân trang chính mà chúng ta thấy trong các ứng dụng ngày nay . Chúng ta hãy xem nhanh cả ba hình thức phân trang phổ biến: đánh số, tải nhiều hơn và cuộn vô hạn.

Phân trang được đánh số

Phân trang được đánh số thường là ý của chúng tôi khi nói về phân trang. Trong hình thức này, nội dung được phân chia và hiển thị trên các trang riêng biệt.

Một ví dụ tuyệt vời về hình thức phân trang này là kết quả tìm kiếm của Google.

Ví dụ về phân trang được đánh số trên Google

Tải thêm phân trang

Cách tiếp cận tải nhiều hơn là một dạng phân trang phổ biến khác. Đây là nơi nút "tải thêm" ở cuối danh sách và tải thêm các mục khi được nhấp vào. Nó cũng có thể ở dạng nút “tiếp theo” tải nhiều mục hơn nhưng không nhất thiết phải nằm trên cùng một trang.

Một ví dụ tuyệt vời về phương pháp phân trang tải nhiều hơn là trên blog. Thường có một nút ở cuối danh sách tải nhiều bài đăng trên blog hơn khi nó được nhấp vào. Cách tiếp cận này rất tốt cho các trang web mà bạn muốn người dùng nhìn thấy chân trang ở cuối trang.

Tải thêm các bài báo

Ngoài ra còn có một dạng khác của phương pháp phân trang tải nhiều hơn cho các trang không được đánh số. Ví dụ: bạn nhận được các nút này để tải thêm nội dung trong phiên bản Reddit cũ.

Xem thêm trên Reddit cũ

Cuộn vô hạn

Cuộn vô hạn đặc biệt phổ biến trong các nguồn cấp dữ liệu nơi người dùng có thể tiếp tục cuộn qua một danh sách dài các mục. Không có khái niệm về các trang trong cách tiếp cận này, nhưng danh sách mà người dùng cuộn qua là sự kết hợp của các phần của danh sách ngắn hơn. Các tập hợp con này của danh sách chính được tìm nạp và thêm vào khi người dùng cuộn.

Cuộn vô hạn là những gì phiên bản mới của Reddit, cũng như hầu hết các nền tảng truyền thông xã hội, sử dụng.

Ví dụ về Infinite Scroll Reddit

Phân trang trong GraphQL

Chúng ta đã thấy các cách phổ biến để thực hiện phân trang trong một ứng dụng, vì vậy bây giờ hãy xem cách nó hoạt động trong GraphQL. Mặc dù không có một cách cụ thể nào để thực hiện phân trang, nhưng trang web chính thức của GraphQL cung cấp cho chúng ta ba cách chính mà chúng ta có thể thực hiện:

  • Phân trang dựa trên bù đắp
  • Phân trang dựa trên con trỏ
  • Phân trang dựa trên ID

Phân trang dựa trên bù đắp

Phương pháp này thường được coi là hình thức phân trang đơn giản nhất trong GraphQL. Đối với phân trang dựa trên độ lệch, truy vấn thường bao gồm hai đối số: first(hoặc limit) và offset(hoặc skip). Đối firstsố xác định số lượng mục mà danh sách trả về và offsetđối số xác định số lượng chúng ta nên bỏ qua trong danh sách.

Với kiểu thiết lập phân trang này, các truy vấn của bạn có thể trông giống như sau:

query {
  people(first: 3, offset: 0) {
    name
  }
}

Truy vấn này sẽ có ba người trong danh sách bắt đầu từ 0, người đầu tiên. Chúng tôi kết thúc với ba người đầu tiên trong danh sách.

Truy vấn ba người đầu tiên

Bạn cũng có thể quyết định không bắt đầu từ người đầu tiên trong danh sách. Có lẽ bạn muốn trang thứ hai có ba người khác bắt đầu từ người thứ tư trong danh sách. Không thành vấn đề! Các đối số truy vấn của bạn sẽ chỉ phải thay đổi một chút:

query {
  people(first: 3, offset: 3) {
    name
  }
}

Kết quả bây giờ sẽ được bù đắp bởi ba mục và bắt đầu với mục thứ tư thay vì mục đầu tiên.

Ba mục đầu tiên được bù lại bởi ba

Chúng tôi cũng có thể tự do thay đổi các giá trị firstoffsetgiá trị để phù hợp với nhu cầu của chúng tôi. Truy vấn sau lấy bốn mục từ danh sách offsetvới 1:

query {
  people(first: 4, offset: 1) {
    name
  }
}

Điều này có nghĩa là danh sách sẽ chứa bốn mục bắt đầu từ mục thứ hai.

Bốn mục bắt đầu với một mục thứ hai

Đó là những điều cơ bản của phân trang dựa trên bù đắp. Mặc dù nó đơn giản nhưng nó cũng có những hạn chế - đó là nó dễ bị lặp lại hoặc bỏ sót dữ liệu. Vấn đề này chủ yếu xảy ra khi các mục mới được thêm vào danh sách trong quá trình phân trang.

Khi một mục mới được thêm vào, vị trí của các mục trong mảng có thể thay đổi. Và vì offsetphụ thuộc vào vị trí mục, nếu một mục được thêm vào đầu danh sách, mục danh sách cuối cùng trên trang trước có thể trở thành mục đầu tiên trên trang tiếp theo vì vị trí của nó bây giờ thấp hơn.

Phân trang dựa trên con trỏ

Phân trang dựa trên con trỏ là tiêu chuẩn được chấp nhận rộng rãi nhất để phân trang trong GraphQL. Nó có khả năng chống lại những thay đổi xảy ra trong danh sách khi phân trang, vì nó không dựa vào vị trí của các mục mà dựa vào a cursor.

Phân trang dựa trên con trỏ có thể được thực hiện theo một số cách. Phổ biến nhất và được chấp nhận rộng rãi sau Thông số kết nối Relay GraphQL .

Việc triển khai đặc tả kết nối Relay cho phân trang dựa trên con trỏ có thể phức tạp nhưng mang lại cho chúng ta nhiều thông tin và linh hoạt hơn.

Đặc tả này cung cấp cho chúng ta một số đối số mà chúng ta có thể sử dụng để phân trang. Chúng bao gồm firstafter(hoặc afterCursor) để phân trang tiến và lastbeforephân trang lùi.
Chúng tôi cũng có quyền truy cập vào một số lĩnh vực.

Hãy đánh giá truy vấn này:

query ($first: Int, $after: String) {
  allPeople(first: $first, after: $after){
    pageInfo {
      hasNextPage
      endCursor
    }
    edges {
      cursor
      node {
        id
        name
      }
    }
  }
}

Bạn sẽ nhận thấy rằng với các đối số firstaftercho các trường, chúng ta có:

  • pageInfo: chứa thông tin trên trang bao gồm:
    • hasNextPage: liệu có các mục khác sau trang hiện tại này (hoặc một phần, tập hợp con)
    • endCursor: con trỏ của mục danh sách cuối cùng trên trang hiện tại
  • edges: chứa dữ liệu sau cho từng mục trong danh sách:
    • cursor: thường là một giá trị không rõ ràng có thể được tạo từ dữ liệu mặt hàng
    • node: dữ liệu mặt hàng thực tế

Bây giờ, nhìn lại truy vấn ở trên với các biến sau:

{
  "first": 2,
  "after": "YXJyYXljb25uZWN0aW9uOjI="
}

Đây là phản hồi mà chúng tôi nhận được:

{
  "allPeople": {
    "pageInfo": {
      "hasNextPage": true,
      "endCursor": "YXJyYXljb25uZWN0aW9uOjQ="
    },
    "edges": [
      {
        "cursor": "YXJyYXljb25uZWN0aW9uOjM=",
        "node": {
          "id": "cGVvcGxlOjQ=",
          "name": "Darth Vader"
        }
      },
      {
        "cursor": "YXJyYXljb25uZWN0aW9uOjQ=",
        "node": {
          "id": "cGVvcGxlOjU=",
          "name": "Leia Organa"
        }
      }
    ]
  }
}

Bạn có thể tự mình thử truy vấn này trên sân chơi SWAPI GraphiQL .

Phân trang dựa trên ID

Mặc dù phân trang dựa trên ID không được sử dụng phổ biến như hai phương pháp còn lại, nhưng nó vẫn đáng để thảo luận.

Phương pháp này khá giống với phân trang dựa trên bù đắp. Sự khác biệt là thay vì sử dụng offsetđể xác định nơi danh sách trả về sẽ bắt đầu, nó sử dụng afterID(hoặc đơn giản after) chấp nhận idmột mục trong danh sách.

Hãy xem truy vấn này:

query {
  people(first: 3, after: "C") {
    name
  }
}

Thao tác này sẽ lấy ba mục đầu tiên từ danh sách sau mục có idcủa C.ID của truy vấn C

Điều này giúp giải quyết vấn đề phân trang dựa trên độ lệch vì các mục được trả về không còn dựa vào vị trí của các mục. Giờ đây, họ dựa vào chính các mục đang sử dụng idlàm mã nhận dạng duy nhất.

Được rồi, bây giờ chúng ta đã quen với cách phân trang hoạt động trong GraphQL, hãy đi sâu vào cuộn vô hạn!

Cách cuộn vô hạn hoạt động

Tôi muốn giả định rằng tất cả chúng ta đều đã sử dụng ứng dụng mạng xã hội hoặc nguồn cấp tin tức ít nhất một lần trước đây. Do đó, chúng ta nên làm quen với cuộn vô hạn là gì. Nội dung mới được thêm vào nguồn cấp dữ liệu trước hoặc cùng thời điểm bạn đến cuối trang.

Đối với các ứng dụng JavaScript, chúng ta có thể triển khai tính năng cuộn vô hạn theo hai cách chính: với các trình xử lý sự kiện cuộn hoặc API Intersection Observer .

Các trình xử lý sự kiện cuộn

Đối với trình xử lý sự kiện cuộn, chúng tôi chạy một hàm sẽ tìm nạp trang sau theo hai điều kiện:

  • Vị trí cuộn ở cuối trang
  • Có một trang tiếp theo để tìm nạp

Mã JavaScript chung cho phương pháp này sẽ trông giống như sau:

 window.addEventListener('scroll', () => {
    let {
        scrollTop,
        scrollHeight,
        clientHeight
    } = document.documentElement;

    if (scrollTop + clientHeight >= scrollHeight && hasNextPage) {
      fetchMore()
    }
});

Ở đây, chúng tôi đang nghe một scrollsự kiện trong window. Trong hàm gọi lại, chúng tôi nhận được scrollTopscrollHeightcủa clientHeighttài liệu.

Sau đó, chúng tôi có một ifcâu lệnh kiểm tra xem số lượng cuộn ( scrollTop) được thêm vào chiều cao của khung nhìn ( clientHeight) lớn hơn hoặc bằng chiều cao của trang ( scrollHeight), cũng như nếu hasNextPagelà đúng.

Nếu câu lệnh là true, nó sẽ chạy hàm fetchMore()lấy nhiều mục hơn và thêm chúng vào danh sách.

API trình quan sát giao lộ

Không giống như phương pháp xử lý sự kiện cuộn, phương pháp này không dựa vào sự kiện cuộn. Thay vào đó, nó theo dõi khi một phần tử hiển thị trên khung nhìn và kích hoạt một sự kiện.

Đây là một ví dụ cơ bản:

const options = {
  root: document.querySelector("#list"),
  threshold: 0.1,
};

let observer = new IntersectionObserver((entries) => {
  const entry = entries[0];
  if (entry.isIntersecting) {
    fetchMore()
  }
}, options);

observer.observe(document.querySelector("#target"));

Chúng tôi xác định các tùy chọn với cài đặt cho người quan sát. Với nó, chúng tôi đang theo dõi những thay đổi về khả năng hiển thị của targetphần tử trong thư mục gốc. Đây rootlà một phần tử với idcủa list.
Chúng tôi cũng có một thresholdxác định bao nhiêu targetphần tử giao với phần tử gốc.

Chúng tôi gán IntersectionObserverchức năng cho observer.value. Sau đó, chúng tôi truyền một hàm gọi lại cùng với hàm đã xác định options.

Lệnh gọi lại chấp nhận tham số entries, một danh sách các mục nhập được lệnh gọi lại nhận được với một entrycho mỗi mục tiêu đã báo cáo sự thay đổi trong trạng thái giao nhau của nó. Mỗi mục nhập chứa một số thuộc tính, chẳng hạn như isIntersecting, cho chúng ta biết liệu phần tử đích bây giờ có giao với gốc hay không và trong hầu hết các trường hợp, có thể nhìn thấy được hay không.

Khi entry.isIntersectingđúng, fetchMore()hàm được kích hoạt và thêm nhiều mục hơn vào danh sách.

Xây dựng ứng dụng của chúng tôi

Chúng tôi sẽ xây dựng một ứng dụng Vue đơn giản với Apollo Client để giao tiếp với API GraphQL demo. Bạn có thể tìm thấy dự án cuối cùng về những gì chúng tôi sẽ xây dựng được lưu trữ trên Netlify .

Để bắt đầu, bạn cần:

  • Một trình soạn thảo văn bản - VSCode chẳng hạn
  • Kiến thức cơ bản về Vue
  • Kiến thức cơ bản về GraphQL
  • Phiên bản Node.js gần đây đã được cài đặt

Thiết lập API Demo của chúng tôi

Đối với hướng dẫn này, chúng tôi sẽ sử dụng SWAPI GraphQL Wrapper, một trình bao bọc xung quanh SWAPI được xây dựng bằng GraphQL.

Đầu tiên, hình thành kho lưu trữ từ GitHub:

git clone https://github.com/graphql/swapi-graphql.git

Sau đó, cài đặt các phụ thuộc với những thứ sau:

npm install

Khởi động máy chủ bằng:

Thao tác này sẽ khởi động máy chủ API GraphQL tại một cổng localhost ngẫu nhiên.

🚨Nếu bạn đang sử dụng Windows và gặp phải bất kỳ sự cố nào tương tự như sự cố được đề cập trong vấn đề này khi cài đặt, bạn có thể làm theo hướng dẫn để giải quyết. Trong
package.json, bạn cũng có thể chỉnh sửa dòng 40 ( build:lambda) để thêm vào SETtrước NODE_ENV- SET NODE_ENV. Sau đó chạy npm installlại.

Ngoài ra, bạn có thể chỉ cần sử dụng phiên bản đã triển khai này cho các truy vấn của mình.

Tạo ứng dụng Vue của chúng tôi

Để tạo một ứng dụng mới, hãy điều hướng đến thư mục bạn chọn và chạy:

npm init vue@latest

Bây giờ, hãy xem qua lời nhắc để định cấu hình cài đặt của bạn:

√ Project name: ... vue-infinite-scroll
√ Add TypeScript? ... No / Yes
√ Add JSX Support? ... No / Yes
√ Add Vue Router for Single Page Application development? ... No / Yes
√ Add Pinia for state management? ... No / Yes
√ Add Vitest for Unit Testing? ... No / Yes
√ Add Cypress for both Unit and End-to-End testing? ... No / Yes
√ Add ESLint for code quality? ... No / Yes

Scaffolding project in C:\Users\user\Documents\otherprojs\writing\logrocket\vue-infinite-scroll...

Done. Now run:
  cd vue-infinite-scroll
  npm install
  npm run dev

Điều hướng đến thư mục mới tạo của bạn vue-infinite-scroll, cài đặt các gói được liệt kê trong đầu ra ở trên và khởi động ứng dụng:

cd vue-infinite-scroll
npm install
npm run dev

Tiếp theo, chúng tôi sẽ cài đặt các gói sau:

npm install --save graphql graphql-tag @apollo/client @vue/apollo-composable

Chúng tôi đang cài đặt @vue/apollo-composablegói bổ sung để hỗ trợ Apollo với Vue Composition API.

Tiếp theo, hãy tạo một số cấu hình.

Trong ./src/main.jstệp, hãy thêm phần sau để tạo một ApolloClientphiên bản:

// ./src/main.js

import { createApp, provide, h } from 'vue'
import { createPinia } from 'pinia'

import { ApolloClient, InMemoryCache } from '@apollo/client/core'
import { DefaultApolloClient } from '@vue/apollo-composable'

import App from './App.vue'
import './assets/base.css'

// Cache implementation
const cache = new InMemoryCache()

// Create the apollo client
const apolloClient = new ApolloClient({
  cache,
  uri: 'http://localhost:64432'
  // or
  // uri: 'https://swapi-gql.netlify.app/.netlify/functions/index`
})

const app = createApp({
  setup() {
    provide(DefaultApolloClient, apolloClient)
  },
  render: () => h(App)
})

app.use(createPinia())
app.mount('#app')

Ở đây, chúng tôi đã tạo một phiên bản apolloClientvới InMemoryCachemáy urichủ SWAPI GraphQL mà chúng tôi đã thiết lập trước đó.

Bây giờ, chúng tôi sẽ tìm nạp dữ liệu từ GraphQL. Trong ./src/App.vuetệp, hãy thiết lập danh sách của chúng tôi:

<!-- ./src/App.vue -->
<script setup>
import { computed, onMounted, ref } from "vue";

import gql from "graphql-tag";
import { useQuery } from "@vue/apollo-composable";

// GraphQL query
const ALLSTARSHIPS_QUERY = gql`
  query AllStarships($first: Int, $after: String) {
    allStarships(first: $first, after: $after) {
      pageInfo {
        hasNextPage
        endCursor
      }
      edges {
        cursor
        node {
          id
          name
          starshipClass
        }
      }
    }
  }
`;

// destructure
const {
  // result of the query
  result,
  // loading state of the query
  loading,
  // query errors, if any
  error,
  // method to fetch more
  fetchMore,
  // access to query variables
  variables
} = useQuery(ALLSTARSHIPS_QUERY, { first: 5 });

// computed value to know if there are more pages after the last result
const hasNextPage = computed(() => result.value.allStarships.pageInfo.hasNextPage);

</script>
<template>
  <main>
    <ul class="starship-list">
      <p v-if="error">oops</p>
      <!-- "infinite" list -->
      <li v-else v-for="starship in result?.allStarships.edges" :key="starship.node.id" class="starship-item">
        <p>{{ starship.node.name }}</p>
      </li>
    </ul>
    <!-- target button, load more manually when clicked -->
    <button ref="target" @click="loadMore" class="cta">
      <span v-if="loading">Loading...</span>
      <span v-else-if="!hasNextPage">That's a wrap!</span>
      <span v-else>More</span>
    </button>
  </main>
</template>
<style scoped>
button {
  cursor: pointer;
}
main {
  width: 100%;
  max-width: 30rem;
  margin: auto;
  padding: 2rem;
}
.starship-list {
  list-style: none;
  padding: 4rem 0 4rem 0;
}
.starship-item {
  font-size: xx-large;
  padding: 1rem 0;
}
.cta {
  padding: 0.5rem 1rem;
  background: var(--vt-c-white-soft);
  color: var(--color-background-soft);
  border: none;
  border-radius: 0.5rem;
}
</style>

Đầu tiên chúng tôi nhập gqltừ graphql-taggói và useQuerytừ @vue/apollo-composable. useQuerycho phép chúng tôi thực hiện các truy vấn GraphQL.

Tiếp theo, chúng tôi thiết lập truy vấn của mình ALLSTARSHIPS_QUERYvới các biến firstafterchúng tôi sẽ xác định khi thực hiện truy vấn.

Để thực hiện truy vấn, chúng tôi sử dụng useQuery(). cung cấp một số thuộc tính useQuery()như result,, và .loadingerrorfetchMorevariables

Khi gọi useQuery(), chúng tôi chuyển vào truy vấn thực tế ALLSTARSHIPS_QUERYvà một đối tượng chứa các biến của chúng tôi { first: 5 }, để tìm nạp năm mục đầu tiên.

Ngoài ra, chúng tôi có một <button>với ref="target"trong của chúng tôi <template>. Đây là nút "tải thêm" của chúng tôi.

Khi chúng tôi tiến triển, chúng tôi sẽ chỉ sử dụng nó để quan sát khi chúng tôi đã đến cuối danh sách và tự động tải thêm nội dung bằng cách sử dụng API Intersection Observer.

Đây là những gì chúng ta nên có ngay bây giờ:

Danh sách tĩnh các phi thuyền

Xây dựng chức năng cuộn vô hạn

Hãy đi từng bước để xem cách chúng ta có thể sử dụng nút đích để tải thêm các mục khi được nhấp vào. Điều này rất dễ dàng với Apollo. Apollo cung cấp fetchMore()phương pháp mà chúng ta có thể sử dụng, như tên gọi của nó, tìm nạp nhiều nội dung hơn và hợp nhất nó với kết quả ban đầu.

Để điều này hoạt động, chúng tôi sẽ gói hàm fetchMore()trong một loadMore()hàm trong ./src/App.vue:

<!-- ./src/App.vue -->
<script setup>
// ...

// function to load more content and update query result
const loadMore = () => {
  // fetchMore function from `useQuery` to fetch more content with `updateQuery`
  fetchMore({

    // update `after` variable with `endCursor` from previous result
    variables: {
      after: result.value?.allStarships.pageInfo.endCursor,
    },

    // pass previous query result and the new results to `updateQuery`
    updateQuery: (previousQueryResult, { fetchMoreResult }) => {
      // define edges and pageInfo from new results
      const newEdges = fetchMoreResult.allStarships.edges;
      const pageInfo = fetchMoreResult.allStarships.pageInfo;

      // if newEdges actually have items,
      return newEdges.length
        ? // return a reconstruction of the query result with updated values
          {
            // spread the value of the previous result
            ...previousQueryResult,

            allStarships: {
              // spread the value of the previous `allStarhips` data into this object
              ...previousQueryResult.allStarships,

              // concatenate edges
              edges: [...previousQueryResult.allStarships.edges, ...newEdges],

              // override with new pageInfo
              pageInfo,
            },
          }
        : // else, return the previous result
          previousQueryResult;
    },
  });
};

Ở đây, chúng ta có loadMore()hàm gọi fetchMore()phương thức. fetchMore()chấp nhận một đối tượng của variablesupdateQuery().

Chúng tôi sẽ xác định các biến được cập nhật trong thuộc variablestính. Ở đây, chúng tôi cập nhật afterbiến để tương ứng với con trỏ cuối cùng từ kết quả đầu tiên (hoặc trước đó).

Tuy updateQuery()nhiên, chúng tôi lấy và xác định edgespageInfotừ các kết quả truy vấn mới và xây dựng lại kết quả truy vấn, nếu có. Chúng tôi giữ lại các giá trị của resultđối tượng trước đó bằng cách sử dụng spreadcú pháp để nối các thuộc tính đối tượng hoặc thay thế hoàn toàn chúng bằng một đối tượng mới (chẳng pageInfohạn như với).

Đối với các cạnh, chúng tôi thêm các kết quả mới vào các kết quả trước đó trong edgesmảng.
Nhớ nút "target"? Chúng tôi có một @clicktrình xử lý gọi loadMore()hàm:

<button ref="target" @click="loadMore" class="cta">

Bây giờ, chúng ta sẽ có ứng dụng của mình tải thêm các starhips chỉ bằng một nút nhấn:

Tải thêm Starships

Đáng kinh ngạc! Hãy tăng lực đẩy của chúng tôi lên một chút và xem làm thế nào chúng tôi có thể loại bỏ nỗ lực thủ công để có cảm giác cuộn vô hạn thực sự. Đầu tiên, chúng ta sẽ xem xét cách thực hiện việc này với các trình xử lý sự kiện cuộn.

Cuộn vô hạn với trình xử lý sự kiện cuộn

Điều này sẽ hoạt động tương tự như những gì chúng tôi đã giải thích trước đó. Trong ./src/App.vue, chúng tôi có một onMounted()hook nơi chúng tôi sẽ bắt đầu lắng nghe các sự kiện cuộn ngay sau khi ứng dụng kết nối:

<!-- ./src/App.vue -->
<script setup>
// ...

onMounted(() => {
  // listen to the scroll event in the window object (the page)
  window.addEventListener(
    "scroll",
    () => {
      // define
      let {
        // the amount useer has scrolled
        scrollTop,
        // the height of the page
        scrollHeight,
        // the height of viewport
        clientHeight
      } = document.documentElement;
      // if user has scrolled to the bottom of the page
      if (scrollTop + clientHeight >= scrollHeight && hasNextPage.value) {
        // exccute the loadMore function to fetch more items
        loadMore();
      }
    },
    {
      // indicate that the listener will not cancel the scroll
      passive: true,
    }
  );
});
</script>

Bạn có thể thấy rằng trong lệnh gọi lại trình nghe sự kiện cuộn, chúng tôi thực thi loadMore()chức năng khi người dùng cuộn xuống cuối trang.

🚩Một hạn chế đối với phương pháp xử lý sự kiện cuộn là người dùng phải cuộn để điều này hoạt động. Đảm bảo rằng nội dung trên trang không quá nhỏ để người dùng có thể cuộn qua.

Hãy xem nó trong hành động:

Scroll Event Handler Starships

Ngọt! Tiếp tục, hãy xem cách chúng ta có thể đạt được điều tương tự với API Intersection Observer.

Cuộn vô hạn với API trình quan sát giao lộ

Đối với phương pháp này, chúng ta cần một phần tử để quan sát sẽ cho chúng ta biết khi nào chúng ta đã đến cuối danh sách. Không có yếu tố nào tốt hơn để làm điều đó cho chúng tôi ngoài nút của chúng tôi!

Để nhắm mục tiêu nút trong của chúng tôi <script>, chúng tôi sẽ tạo một targetbiến (cùng tên được sử dụng trong refthuộc tính của nút trong <template>biến) và gán nó cho a ref(null).

Chúng tôi cũng sẽ tạo một refcái observermà sẽ là của chúng tôi IntersectionObserver()trong onMounted()hook:

<!-- ./src/App.vue -->
<script setup>
// ...

// create ref for observer
const observer = ref(null);

// create ref for target element for observer to observe
const target = ref(null);

onMounted(() => {
  // ...

  // options for observer
  const options = {
    threshold: 1.0,
  };

  // define observer
  observer.value = new IntersectionObserver(([entry]) => {
    // if the target is visible
    if (entry && entry.isIntersecting) {
      // load more content
      loadMore();
    }
  }, options);

  // define the target to observe
  observer.value.observe(target.value);
});
</script>

Ở đây, trong onMounted()hook của chúng tôi, trước tiên chúng tôi xác định các tùy chọn mà chúng tôi sẽ chuyển cho của chúng tôi observer.

Chúng tôi xác định trình quan sát bằng cách khởi tạo một hàm mới IntersectionObserver()và chuyển một hàm gọi lại cùng với của chúng tôi options.

Hàm nhận một tham số bị hủy [entry]dưới dạng một tham số. Sau ifđó, câu lệnh xác định xem mục nhập có giao với gốc hay không. Giao điểm này ngụ ý rằng mục tiêu có thể nhìn thấy trên khung nhìn và thực thi loadMore()chức năng.

Giá entrytrị được xác định bởi đối số mà chúng ta chuyển đến observer.observe().

Với điều đó, chúng ta có một danh sách cuộn vô hạn khá gọn gàng!

Danh sách cuộn vô hạn cuối cùng

Sự kết luận

Và chúng tôi đã có nó! Chúng tôi đã tạo một ứng dụng Vue đơn giản để tìm nạp dữ liệu từ API GraphQL với chức năng cuộn vô hạn.

Chúng tôi đã trình bày những kiến ​​thức cơ bản về phân trang, các dạng khác nhau của nó và cách phân trang hoạt động trong GraphQL. Chúng ta đã thảo luận về thao tác cuộn vô hạn và cách chúng ta có thể đạt được hiệu quả trong JavaScript. Chúng tôi cũng đi sâu vào hai cách chính để đạt được nó: trình xử lý sự kiện cuộn và API trình quan sát giao lộ.

Chúng tôi đã rất vui khi xây dựng ứng dụng của mình với Vue và Apollo Client, kết nối nó với API GraphQL và xây dựng chức năng cuộn vô hạn bằng cách sử dụng cả hai trình xử lý sự kiện cuộn và API Intersection Observer.

Cuộn vô hạn là một trong nhiều cách chúng tôi có thể cấu trúc một lượng lớn thông tin được hiển thị cho người dùng của chúng tôi. Nó có ưu và nhược điểm, nhưng với mọi thứ chúng tôi đã đề cập ở đây, tôi chắc chắn rằng bạn sẽ có thể tìm ra cách tiếp cận tốt nhất cho dự án lớn tiếp theo của bạn!

Nguồn: https://blog.logrocket.com/infinite-scrolling-graphql/

#graphql 

Wu Lan (full text + extra chapter)

Xiao Tong did not turn around and tilted his head with chagrin "There are no clothes to wear!" Meng Jinglan raised her eyebrows thinking that there was something wrong with the workmanship She took a few pieces and looked through them Even the stitches were hidden very well It was strange "Why can't I wear them" "It's too old-fashioned" What she said was serious She wore good clothes Petrochemicals yesterday but she was rejected again and again today In her eyes students should be T-shirts cropped pants high ponytails and full of youth On the contrary these butterfly sleeves wrap the chest skirt high waist low waist knee-high hip those fashionable elements are now in her eyes all become the shortcomings of old age Meng Jinglan's aesthetic appreciation of women has always been distorted always staying in the strange circle that Mu Wutong is a flower and other women are tofu dregs In the past she was not beautiful but now she is so beautiful that naturally she will not refute her meaning Otherwise To buy Meng Jinglan asked tentatively Xiao Tong's eyes narrowed "It's too late That's it" Pink suspenders dark blue snowflake pants pointed fish-mouth shoes no makeup plain face really a little schoolboy She seems to be in a good mood turned to Meng Jing Lan smile Meng Jing Lan smiled reluctantly she just turned around immediately sank face look dignified as if facing a formidable enemy On the first day of freshmen registration the school gate was full of cars and the people inside came and went with more luggage full of vigor and vitality Xiao Tong can not help but sigh the appearance has lost one the inner is even more defeated "Have you just entered the school and regretted it" Meng Jinglan heard a faint sigh from the man beside her I suddenly feel old I don't know if this dress is too youthful but he feels that Xiao Tong's eyes are as clear as a pool of water at the moment You're prettier than all of them Meng Jinglan shook her ponytail Avoid the important and dwell on the trivial Xiao Tong murmured sullenly and pulled his hand away from his fingers The report is simple get a material such as student card insurance policy after a small physical examination everything is over Because Meng Zhai was only half an hour away from school the two reached a consensus on going to school I'll be home in about half a morning Xiao Tong this is a preferential treatment simply one excellent in the end military training also need not participate in wait for half a month after the real course began to need to go to school again On the way back Meng Jinglan was obviously in a bad mood his face was very long his eyebrows were twisted and even his lips were straight Xiao Tong on the other hand was in a very good mood and did not stop smiling which was different from his usual calm appearance The source of the matter was the junior who received Xiao Tong He saw Meng Jinglan who was following Xiao Tong According to the usual practice the freshmen were accompanied by their parents "Did your uncle come with you" He asked It is said that boys who study science and engineering have a low EQ As expected it is better to be famous than to see Meng Jinglan's hand holding the physical examination sheet has almost pulled the piece of paper into a ball But Xiao Tong suppressed a smile and answered earnestly with a tiger face "Well my uncle works in the city and I live in his home China Chemicals " Meng Jing Lan wanted to hug her waist and her hand was stiff in the air Xiao Tong is in good health Meng Jing Lan coaxed to sleep early Looking at her sleeping soundly I was really depressed so I found a few married men to come out and drink Aren't they all reunited Why do you still have a bitter hatred on your face Gu Liangyu lay on the sofa and looked sideways at Meng Jinglan who was sitting on the bar The little fat girl is not Received Meng Jing Lan an eye knife Lu Fang Huai Nu Nu ground to change "little sister-in-law body is not all good" Boss Meng a moment of spring night! Several people talked nonsense but Feng Ling asked "Did you accompany Wu Tong to report for duty today" "Yes" Meng Jing Lan answered his hand kept on and in an instant it was full of a glass of red wine Peter has told us that alcohol is strictly prohibited during treatment Feng Ling grabbed the wine from his hand and poured him a glass of pineapple juice Meng Jinglan looked up at him with a calm look Feng Ling didn't mind at all She was still smiling "When you get well no one will care about how you drink Now you can only watch us drink" Then he drank it down Brother did you quarrel with Mu Wutong Xing Zhan was learning to mix wine recently his eyes firmly fixed on the small whiskey glass in his hand and he asked carelessly Meng Jing Lan did not answer everyone followed the principle of silence is the default immediately on the incarnation of peacemaker to persuade Meng Jing Lan suddenly asked "I am not old" The words are less cold in the past with a bit of helplessness that is not clear Stunned for a moment several people wanted to laugh looked at Meng Jinglan's serious look and dared not endured again and again almost bit his lips Didn't you beat me up a few days ago and boast that Bao Dao was not old Lu Fanghuai's round eyes turned saying that it was a comfort but it Plant Extracts was more like a joke Accompany the baby to report for duty today her senior … Thought I was her uncle Chu ran really did not hold back burst out laughing the next second was Meng Jing Lan placed on the ground rubbing his waist or laughing Boss Meng aren't you only thirty How can a kid know the charm of a mature man For Lu Fanghuai who had the same experience it was natural to be indignant A group of old men suddenly have a resonance comfort each other but more and more sad … Xiao Tong slept in the middle of the night turned over his hands and patted on the cold bamboo chips and immediately hit an exciting spirit The light at the head of the bed was dim but Meng Jinglan was not there Climbing up in confusion the hour hand and minute hand on the clock will overlap the crisp sound of the door gently twisted startled her to turn her head Meng Jinglan was tiptoeing in was bumping into Xiao Tong's line of sight Feng Ling and I got together Blurt out the explanation Xiao Tong nodded while yawning since the person came back she settled down "Go to bed early" With a slightly nasal voice he turned and was about to lie down when Meng Jinglan stepped forward through her waist and fixed her in his arms Xiao Tong sniffed the body did not have the slightest smell of alcohol such impulsive behavior but not like by the strength of alcohol Do what "Baby" His voice was still a little muffled With a bit of coquetry Xiao Tong's heart jumped his little hand stroked his strong back and patted him back and forth along the lines of his spine "I'm not very happy today" Meng Jinglan acquiesced Because that boy mistook you for my uncle Xiao Tong curled his lips and glanced at him "When did you become so narrow-minded" 。 globalchemmall.com