Close Menu
Soshace Digital Blog

    Subscribe to Updates

    Get The Latest News, Updates, And Amazing Offers

    What's Hot
    Beginners

    Think Like a Pythonista — Building a Book Sharing App

    JavaScript

    Interoperability between Ethereum, Binance Smart Chain, and other blockchain platforms using Node.js

    JavaScript

    Effective Strategies for Managing Project Risks Successfully

    Important Pages:
    • Home
    • About
    • Services
    • Contact Us
    • Privacy Policy
    • Terms & Conditions
    Facebook X (Twitter) Instagram LinkedIn YouTube
    Today's Picks:
    • Scaling Success: Monitoring Indexation of Programmatic SEO Content
    • Leveraging Influencers: Key Drivers in New Product Launches
    • How Privacy-First Marketing Will Transform the Industry Landscape
    • The Impact of Social Proof on Thought Leadership Marketing
    • Balancing Value-Driven Content and Promotional Messaging Strategies
    • Top Influencer Marketing Platforms to Explore in 2025
    • Emerging Trends in Marketing Automation and AI Tools for 2023
    • Strategies to Mitigate Duplicate Content in Programmatic SEO
    Wednesday, September 10
    Facebook X (Twitter) Instagram LinkedIn YouTube
    Soshace Digital Blog
    • Home
    • About
    • Services
    • Contact Us
    • Privacy Policy
    • Terms & Conditions
    Services
    • SaaS & Tech

      Maximizing Efficiency: How SaaS Lowers IT Infrastructure Costs

      August 27, 2025

      Navigating Tomorrow: Innovations Shaping the Future of SaaS

      August 27, 2025

      Maximizing Impact: Strategies for SaaS & Technology Marketing

      August 27, 2025
    • AI & Automation

      Enhancing Customer Feedback Analysis Through AI Innovations

      August 27, 2025

      Navigating the Impact of AI on SEO and Search Rankings

      August 27, 2025

      5 Automation Hacks Every Home Service Business Needs to Know

      May 3, 2025
    • Finance & Fintech

      Critical Missteps in Finance Marketing: What to Avoid

      August 27, 2025

      Analyzing Future Fintech Marketing Trends: Insights Ahead

      August 27, 2025

      Navigating the Complex Landscape of Finance and Fintech Marketing

      August 27, 2025
    • Legal & Compliance

      Exploring Thought Leadership’s Impact on Legal Marketing

      August 27, 2025

      Maximizing LinkedIn: Strategies for Legal and Compliance Marketing

      August 27, 2025

      Why Transparency Matters in Legal Advertising Practices

      August 27, 2025
    • Medical Marketing

      Enhancing Online Reputation Management in Hospitals: A Guide

      August 27, 2025

      Analyzing Emerging Trends in Health and Medical Marketing

      August 27, 2025

      Exploring Innovative Content Ideas for Wellness Blogs and Clinics

      August 27, 2025
    • E-commerce & Retail

      Strategic Seasonal Campaign Concepts for Online and Retail Markets

      August 27, 2025

      Emerging Trends in E-commerce and Retail Marketing Strategies

      August 27, 2025

      Maximizing Revenue: The Advantages of Affiliate Marketing for E-Commerce

      August 27, 2025
    • Influencer & Community

      Leveraging Influencers: Key Drivers in New Product Launches

      August 27, 2025

      Top Influencer Marketing Platforms to Explore in 2025

      August 27, 2025

      Key Strategies for Successful Influencer Partnership Negotiations

      August 27, 2025
    • Content & Leadership

      The Impact of Social Proof on Thought Leadership Marketing

      August 27, 2025

      Balancing Value-Driven Content and Promotional Messaging Strategies

      August 27, 2025

      Analyzing Storytelling’s Impact on Content Marketing Effectiveness

      August 27, 2025
    • SEO & Analytics

      Scaling Success: Monitoring Indexation of Programmatic SEO Content

      August 27, 2025

      Strategies to Mitigate Duplicate Content in Programmatic SEO

      August 27, 2025

      Effective Data Visualization Techniques for SEO Reporting

      August 27, 2025
    • Marketing Trends

      How Privacy-First Marketing Will Transform the Industry Landscape

      August 27, 2025

      Emerging Trends in Marketing Automation and AI Tools for 2023

      August 27, 2025

      Maximizing ROI: Key Trends in Paid Social Advertising

      August 27, 2025
    Soshace Digital Blog
    Blog / Programming / Уроки React. Урок 13. Часть 2.
    Programming

    Уроки React. Урок 13. Часть 2.

    bragin_paBy bragin_paNovember 10, 2016Updated:December 23, 2019No Comments4 Mins Read
    Facebook Twitter Pinterest Telegram LinkedIn Tumblr Email Reddit
    Уроки React. Урок 13. Часть 2.
    Share
    Facebook Twitter LinkedIn Pinterest Email Copy Link

    react-logo_13_2

    Теперь давайте это вызовем в containers/Articles.js , добавив такую запись вызывая action creater:

    import { loadAllArticles } from '../AC/articles'
    
    class Articles extends Component {
        static propTypes = {
    
        };
    
        componentDidMount() {
            this.props.loadAllArticles()
        }
    

    А ниже в connect мы его обернем :

    export default connect(({ articles, filters }) => {
        return {
            articles: filterArticles(articles, filters)
        }
    }, {
        loadAllArticles
    })(Articles)

    А далее вызовем в  componentDidMount().

    Также в reducer/articles.js мы  уберем defaultArticles которые мы с Вами создавали:

    const defaultArticles = new OrderedMap({})
    

    Не забудем подключить в import объект OrderedMap:

    import { Record, OrderedMap } from 'immutable'

    Теперь нужно подключить наш middleware в нашем store.

    Делаем import:

    import api from '../middlewares/api'

    И добавляем ее в ряд с другими middleware например после randomID:

    const enhancer = compose(
        applyMiddleware(dumbMiddleware, randomId, api, logger),
        window.devToolsExtension ? window.devToolsExtension() : f => f
    )

    Теперь если перезапустить приложение в console можно увидеть что происходит LOAD_ALL_ARTICLES_SUCCESS

    Давайте добавим setTimeout для симуляции некого далекого API, добавим это в middlewares/api.js:

       setTimeout(() => {
            $.get(callAPI)
                .done(response => next({type: type + SUCCESS, response, ...rest}))
                .fail(error => next({type: type + FAIL, error, ...rest}))
        }, 1000)
    }

    Теперь, если вы зайдет в console и перезагрузите наше приложение, у Вас произойдут действия  START и через секунду SUCCESS.

    Теперь нам осталось научить наши reducers обращаться с новой логикой. Перейдем в reducer/articles.js.  Здесь нам уже недостаточно просто иметь articles в виде набора статей, поскольку наше приложение развивается, становиться более сложным, и появляется необходимость иметь информацию о статусе загрузки статей.

    Подключим Map а также immutable массив  List из immutable.js:

    import { Record, OrderedMap, Map, List } from 'immutable'
    

    Опишем начальное состояние нашего reducer  , добавив следующую запись:

    const defaultState = new Map({
        loading: false,
        loaded: false,
        errors: new List([]),
        entities: defaultArticles
    })

    Добавив сюда сами статьи у нас получилась структура, которую мы сможем переиспользовать от одного reducer к другому. Т.е. entities
    у нас будут как статьи так и комментарии. Наш код ниже тоже  претерпит изменения:

    export default (state = defaultState, action) => {
        const { type, payload, response, randomId } = action
    
        switch (type) {
    
    
            case ADD_COMMENT:
                return state.updateIn(['entities' ,payload.articleId, 'comments'], comments => comments.concat(randomId))
    
            case LOAD_ALL_ARTICLES + START:
                return state.set('loading', true)
    
            case LOAD_ALL_ARTICLES + SUCCESS:
                return state
                    .set('loading', false)
                    .set('entities', recordsFromArray(Article, response))
                    //return state.update('entities', entities => entities.merge(recordsFromArray(Article, response)))
    
        }
       
        return state
    }

    Обратите Ваше внимание на закомментированную строку. Эта запись описывает подход как можно по-другому с помощью методов update и  merge из immutable.js загрузить наши статьи. В этом случаем мы  делаем обновление списка наших статей. Когда у нас приходит LOAD_ALL_ARTICLES + SUCCESS  мы берем старые entities  (если они у нас были) и делаем merge с новыми. По умолчанию, процесс добавления статей будет реализован нами c помощью set  – т.е. просто полным обновлением списка. Мы добавили .set('loading', ...), для того чтобы можно было добавить loader при загрузке наших статей.

    Read More:  14. Уроки Node.js. Отладка скриптов. Часть 1.

    Идем дальше, теперь нам нужно переписать логику того как мы получаем данные в filterArticles в containers/Articles.jsа также добавить loader в наш UI:

        render() {
            const { articles, loading } = this.props
            if (loading) return <h1>Loading...</h1>
            return <ArticleList articles = {articles} />
        }
    }
    
    export default connect(({ articles, filters }) => {
        return {
            loading: articles.get('loading'),
            articles: filterArticles(articles.get('entities'), filters)
        }
    }, {
        loadAllArticles
    })(Articles)

    Мы добавили индикатор в export default), а  в render простенький loader. (когда мы закончим, до загрузки статей будет появлятся соответствующая надпись “Loading”).
    В immutable.js вы должны явно писать ваше обращение  для того чтобы получить данные articles.get('entities'). Когда мы использовали immutable object Record мы могли избежать такого рода обращения, т.к. все происходило “под капотом” и getters, setters, создавались внутри, как в случае с const Article в reducer/articles.js.
    Продолжим наши преобразования и изменим  reducer/articles.js  следующим образом:

    import { DELETE_ARTICLE, ADD_COMMENT, LOAD_ALL_ARTICLES, START, SUCCESS } from '../constants'
    import { Record, OrderedMap, Map, List } from 'immutable'
    import { recordsFromArray } from './utils'

    ошибки мы с Вами пока обрабатывать пока не будем. Запись про importnormalizedArticles нам здесь больше не понадобиться. Поменяем нашу константу defaultArticles :

    const defaultArticles = recordsFromArray(Article, [])

    И конечно же return в конце файла:

    return state

    Теперь все готово, можно проверять! Код нашего урока доступен по этой ссылке. До скорых встреч, дальше еще очень много интересного, увидимся!

    react-boilerplate

    We are looking forward to meeting you on our website blog.soshace.com

    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    bragin_pa

      Related Posts

      3. Уроки Express.js. Шаблонизация с EJS: Layout, Block, Partials

      December 16, 2016

      Уроки Express.js . Логгер, Конфигурация, Шаблонизация с EJS. Часть 2.

      December 2, 2016

      2. Уроки Express.js . Логгер, Конфигурация, Шаблонизация с EJS. Часть 1.

      November 24, 2016
      Leave A Reply Cancel Reply

      You must be logged in to post a comment.

      Stay In Touch
      • Facebook
      • Twitter
      • Pinterest
      • Instagram
      • YouTube
      • Vimeo
      Don't Miss
      E-commerce & Retail August 27, 2025

      Maximizing Revenue: The Advantages of Affiliate Marketing for E-Commerce

      Affiliate marketing serves as a powerful tool for e-commerce businesses, offering cost-effective customer acquisition. By leveraging affiliate networks, brands can maximize revenue through performance-based commissions, enhancing reach and driving conversions efficiently.

      Setting Up Automated Semantic Versioning For Your NodeJS Project

      August 8, 2020

      Streamlining LinkedIn Lead Generation with Effective CRM Integration

      December 10, 2024

      Developing the Proper Business Performance

      January 20, 2019

      Categories

      • AI & Automation
      • Angular
      • ASP.NET
      • AWS
      • B2B Leads
      • Beginners
      • Blogs
      • Business Growth
      • Case Studies
      • Comics
      • Consultation
      • Content & Leadership
      • CSS
      • Development
      • Django
      • E-commerce & Retail
      • Entrepreneurs
      • Entrepreneurship
      • Events
      • Express.js
      • Facebook Ads
      • Finance & Fintech
      • Flask
      • Flutter
      • Franchising
      • Funnel Strategy
      • Git
      • GraphQL
      • Home Services Marketing
      • Influencer & Community
      • Interview
      • Java
      • Java Spring
      • JavaScript
      • Job
      • Laravel
      • Lead Generation
      • Legal & Compliance
      • LinkedIn
      • Machine Learning
      • Marketing Trends
      • Medical Marketing
      • MSP Lead Generation
      • MSP Marketing
      • NestJS
      • Next.js
      • Node.js
      • Node.js Lessons
      • Paid Advertising
      • PHP
      • Podcasts
      • POS Tutorial
      • Programming
      • Programming
      • Python
      • React
      • React Lessons
      • React Native
      • React Native Lessons
      • Recruitment
      • Remote Job
      • SaaS & Tech
      • SEO & Analytics
      • Soshace
      • Startups
      • Swarm Intelligence
      • Tips
      • Trends
      • Vue
      • Wiki
      • WordPress
      Top Posts

      Create a simple POS with React, Node and MongoDB #1: Register and Login with JWT

      JavaScript January 14, 2020

      Mastering N-API and Native Modules in Node.js

      JavaScript February 13, 2024

      Maximizing B2B Lead Generation with Interactive Content

      B2B Leads December 9, 2024

      Create simple POS with React, Node and MongoDB #2: Auth state, Logout, Update Profile

      JavaScript January 22, 2020

      Subscribe to Updates

      Get The Latest News, Updates, And Amazing Offers

      About Us
      About Us

      Soshace Digital delivers comprehensive web design and development solutions tailored to your business objectives. Your website will be meticulously designed and developed by our team of seasoned professionals, who combine creative expertise with technical excellence to transform your vision into a high-impact, user-centric digital experience that elevates your brand and drives measurable results.

      7901 4th St N, Suite 28690
      Saint Petersburg, FL 33702-4305
      Phone: 1(877)SOSHACE

      Facebook X (Twitter) Instagram Pinterest YouTube LinkedIn
      Our Picks
      Programming

      Доклад. Agile (вводная часть). Scrum

      JavaScript

      Forget About Auth0: Implementing Authentication with Clerk.dev in Your Next.js App

      JavaScript

      This Is How I Created a Simple App Using React Routing

      Most Popular

      Best Resources for Preparing for Your Technical Interview: Books and Online Platforms

      Interview

      2. Уроки Express.js . Логгер, Конфигурация, Шаблонизация с EJS. Часть 1.

      Programming

      Programming Patterns. Module, Singleton, Factory

      Programming
      © 2025 Soshace Digital.
      • Home
      • About
      • Services
      • Contact Us
      • Privacy Policy
      • Terms & Conditions

      Type above and press Enter to search. Press Esc to cancel.