Realtime GraphQL UI Updates in React with Apollo. ― Scotch

Realtime GraphQL UI updates in React with Apollo  #ReactJS #GraphQL

  • // ChannelsListWithData = graphql(channelsListQuery, { options: { pollInterval: 5000 a new channel from another client now updates our list of channels after 5 seconds, not the best way of doing it but a step in making the application realtime.
  • store.writeQuery({ query: channelsListQuery, data }); – } – }) – … – As soon as the mutation completes, we read the current result for the channelsListQuery out of the store, append the new channel to it, and tell Apollo Client to write it back to the store.
  • To add WebSocket support to our existing interface, we will construct a GraphQL Subscription client and merge it with our existing network interface to create a new interface that performs normal GraphQL queries over HTTP and subscription queries over WebSockets.
  • … – We edit the following part to disable const ChannelsListWithData = graphql(channelsListQuery, { options: { pollInterval: 5000 }})(ChannelsList); – … – Edit the above to: const ChannelsListWithData = to add a new channel now in our app does not reflect the changes until we refresh the page and that…
  • jsx – … – import { SubscriptionClient, addGraphQLSubscriptions } from networkInterface = createNetworkInterface({ – uri: wsClient = new { – reconnect: true – }); – – // Extend the network interface with the WebSocket – const = addGraphQLSubscriptions( – networkInterface, – wsClient – ); – To enable subscriptions throughout our…

This is the fourth and final part of a 4-part series of articles explaining the implementation of GraphQL on an Express Server and similarly in a React client using Apollo. In this article we look at how to maintain realtime UI updates after implementing different GraphQL updates that result in either creation, update or deletion of data on the server side. For part 1, 2 and 3, refer to the links:
Continue reading “Realtime GraphQL UI Updates in React with Apollo. ― Scotch”

How to Build a Todo App Using React, Redux, and Immutable.js — SitePoint

  • This helps us get a feel for what we’re going to need our components to render:
    const dummyTodos = [
    { id: 0, isDone: true, text: ‘make components’ },
    { id: 1, isDone: false, text: ‘design actions’ },
    { id: 2, isDone: false, text: ‘implement reducer’ },
    { id: 3, isDone: false, text: ‘connect components’ }
    ];

    For this application, we’re only going to need two React components, Todo / and TodoList /.

  • js

    import React from ‘react’;

    export function Todo(props) {
    const { todo } = props;
    if(todo.isDone) {
    return strike{todo.text}/strike;
    } else {
    return span{todo.text}/span;
    }
    }

    export function TodoList(props) {
    const { todos } = props;
    return (
    div className=’todo’
    input type=’text’ placeholder=’Add todo’ /
    ul className=’todo__list’
    {todos.map(t = (
    li key={t.id} className=’todo__item’
    Todo todo={t} /
    /li
    ))}
    /ul
    /div
    );
    }

    At this point, we can test these components by creating an index.html file in the project folder and populating it with the following markup.

  • /components’;

    const dummyTodos = [
    { id: 0, isDone: true, text: ‘make components’ },
    { id: 1, isDone: false, text: ‘design actions’ },
    { id: 2, isDone: false, text: ‘implement reducer’ },
    { id: 3, isDone: false, text: ‘connect components’ }
    ];

    render(
    TodoList todos={dummyTodos} /,
    the code with npm run build, then navigate your browser to the index.html file and make sure that it’s working.

  • Our dummy data is a great place to start from, and we can easily translate it into ImmutableJS collections:
    import { List, Map } from ‘immutable’;

    const dummyTodos = List([
    Map({ id: 0, isDone: true, text: ‘make components’ }),
    Map({ id: 1, isDone: false, text: ‘design actions’ }),
    Map({ id: 2, isDone: false, text: ‘implement reducer’ }),
    Map({ id: 3, isDone: false, text: ‘connect components’ })
    ]);

    ImmutableJS maps don’t work in the same way as JavaScript’s objects, so we’ll need to make some slight tweaks to our components.

  • The mapStateToProps function takes the store’s current state as an argument (in our case, a list of todos), then it expects the return value to be an object that describes a mapping from that state to props for our wrapped component:
    function mapStateToProps(state) {
    return { todos: state };
    }

    It might help to visualize this on an instance of the wrapped React component:
    TodoList todos={state} /

    We’ll also need to supply a mapDispatchToProps function, which is passed the store’s dispatch method, so that we can use it to dispatch the actions from our action creators:
    function mapDispatchToProps(dispatch) {
    return {
    addTodo: text = dispatch(addTodo(text)),
    toggleTodo: id

Dan Prince shows how to build a Todo app using React, Redux, and Immutable.js.
Continue reading “How to Build a Todo App Using React, Redux, and Immutable.js — SitePoint”

Why you need keys for collections in React.

Why you need keys for collections in #ReactJS:  #Javascript

  • React will even give you a nice warning:

    The output DOM is then:

    This makes sense, because if you consider that the key is a unique identifier for a conceptual element, react doesn’t want to waste time rendering both.

  • This will render elements like:

    Now let’s suppose that we add a user to the front of the list:

    This will render elements like:

    After we add another user, React will go into reconciliation, where it will update the dom depending on the shape of the elements returned from the component’s render function.

  • Obviously, it’s simply to add one dom element to the beginning, and leave the previous to unchanged.
  • A good key uniquely identifies the content of the element.
  • Here are the two trees produced with the username as the key:

    React now understands that the elements with keys “bob” and “sue” have remained unchanged, and we’ve simply re-introduced a new element with key “joe”.

This post will explain the importance of keys in React and some edge cases to consider when choosing them.
Continue reading “Why you need keys for collections in React.”

Building an app: React Native vs Ionic – Hacker Noon

Building an app: React Native vs #Ionic  #ReactJS #JavaScript

  • In this article, we are going to make a comparison of two frameworks, React Native and Ionic, based on our real time experience in frontend development.When developing various products, either for ourselves or for the clients, there has always been a question that interested us: how can we narrow down time and cost of product development.Android and especially iOS developers have always been valued greatly and cost a lot, and when developing for two platforms one has to spend twice as much money.At some point we were experimenting with Cordova, but it didn’t feel as if we can get something valuable out of it.Then we noticed Ionic.
  • Now we would like to give you detailed frameworks comparison and explain you why React Native is better solution for our developers.We were always trying to get more expertise on different technologies and use them in practice in order to define the best solution.
  • We also kept on watching Ioinc2, which was supposed to become an innovation that would solve many issues that we had while working with Ionic1.The approaches of given frameworks are very different but for us React Native is an ultimate winner.We chose main React Native advantages that are superior in relation to Ionic1/2:Response time that could be compared to native apps.Ability to reuse the code parts (not all code) for desktop (web apps) and mobile (mobile apps) and even for the server.
  • (:-))Incredibly convenient toolchain for developers that allows to quickly develop and debug the app.Big amount of elaborated components from Facebook.Even bigger amount of components from community.Ability to realize the ideas of functional programming in development which ensures great stability and reliability of the app and relative scaling simplicity.However, we don’t make a point here that React Native is 100% perfect.
  • We also chose some of React Native disadvantages in comparison with Native Apps:Those code parts that are linked to work with hardware solutions, camera, external libraries integration, etc are still done in Native parts.The interface between javascript and native part is not so simple (but not more complicated than cordova).

When you start to use new technology, you cannot be sure it will be the best solution. In this article, we are going to make a comparison of two frameworks, React Native and Ionic, based on our real t
Continue reading “Building an app: React Native vs Ionic – Hacker Noon”

Redux Thunk

#redux #thunk - how to populate various #reducers:  #reactjs #react #javascript

  • So if we have the dispatch function available in the action creator we can use it to dispatch other actions.
  • Redux Thunk middleware allows you to write action creators that return a function instead of an action.
  • The thunk can be used to delay the dispatch of an action, or to dispatch only if a certain condition is met.
  • We get dispatch and getState functions inside the action creator – it could be very useful…
  • Using Redux Thunk to populate other reducers’ states

Read the full article, click here.


@burczu: “#redux #thunk – how to populate various #reducers: #reactjs #react #javascript”


In the blog post I explain how I have recently solved the problem of populating other reducers using the Redux Thunk middleware.


Redux Thunk

Role-based authorization using React-Router

  • Now we want to make the Profile route (and all its child routes) available only for users with the employee role, and the EmployeesManagement route available for users with the admin role.
  • By inheriting the Profile class from our new AuthorizedComponent we can easily prevent showing all its child routes if they are not available for the current user’s roles.
  • For example, if we have a route /admin/profile we may want to prevent users with only an employee role to open this route.
  • The second thing I had to deal with was the home page which has the same address (route) for all types of user roles.
  • This is a very simple container component which shows different children components depending on the current route (the RouteHandler component takes care of it – this is a subject for another blog post).

Read the full article, click here.


@burczu: “just blogged about #rolebased #authorization in #reactjs with #reactrouter: #javascript #frontend”


In the today’s post I will show you how to deal with the role-based authorization using React and React-router.


Role-based authorization using React-Router