Giter VIP home page Giter VIP logo

react-power-picture's Introduction

React Power Picture

Build Status Coverage Status npm version License: MIT

Zero-dependency React component for progressively loading your images with as much responsiveness as you need. All the power is given to you for extending or wrapping to meet your use case. Serviced by a render prop for excellent integration with all your projects.

The problem

You don't want to load huge images for mobile users but mapping everything in image srcset is verbose. You also want to be able to track the loading state of the image so that you can apply styles for a smooth user interface.

This solution

This is a component that handles all the srcset and responsive image setup for you while keeping track of loading state so that you can worry about making the rest of your page load fast. It uses a render prop which gives you maximum flexibility with a minimal API because you are responsible for the rendering of everything and you simply apply props to what you're rendering. Use this component together with your own taste in styles to acheive effects like Medium's Blur Effect. The implementation is up to you! The heavy lifting (not so heavy actually...) is up to us.

Installation

This module is distributed via npm which is bundled with node and should be installed as one of your project's dependencies:

npm install --save react-power-picture

This package also depends on react and prop-types. Please make sure you have those installed as well.

Usage

Edit v06l97zxyy

import React from 'react';
import { render } from 'react-dom';
import PowerPicture from 'react-power-picture';

const sources = [
  {
    size: 400,
    src: 'https://source.unsplash.com/random/200x140'
  },
  {
    size: 800,
    src: 'https://source.unsplash.com/random/300x200'
  },
  {
    size: 1200,
    src: 'https://source.unsplash.com/random/400x300'
  }
];

render(
  <PowerPicture sources={sources}>
    {(image, loading) => (
      <div>
        <p>Loading state: {loading.toString()}</p>
        <img alt="A p!cture is worth a thousand words" src={image} />
      </div>
    )}
  </PowerPicture>,
  document.getElementById('root')
);

is the only component. It doesn't render anything itself, it just calls the render function and renders that. Use this to create anything you'd like to!

Props

prop type description
sources array An array of objects, each one with a size and src key, value pair. React Power Picture uses this source map and the windows width to determine the optimal image to load given the number of object that the prop provides.
source string A url string for an image. Use this prop if you only have one image size for all device sizes.
onError function Optional callback method that is triggered if there is an error loading the image.

Examples

A live example of this in action can be found on the project's GitHub page.

Inspiration

This project has been heavily inspired by the work of Formidable Labs and their react-progressive-image library. It does many things exactly right but did not provide the responsive solution (srcset) that I was originally looking for.

Another shoutout to the react-simple-image library. This project has everything for responsive images loaded as a srcset but with much broader prop support and less render flexibiliy.

You might consider React Power Picture to be a marriage of the two. My goal for this library to provide both progressive and responsive power.

Other solutions

There are many other React image-related components that you might want to consider before choosing react-power-picture. They all have different use cases, and many of them make opinionated choices in dependencies and/or peer-dependencies. This library will always take the approach of simplicity and flexibility over extended functionality. Do one thing and do it well. If you want to wrap or extend react-power-picture with extra functionality such as network speed detection, element in view, or other features, please extend this work or take a look at the following similar solutions.

If you know of more, please feel free to raise a PR πŸ˜„

License

MIT

react-power-picture's People

Contributors

epeterson320 avatar renovate-bot avatar sanjinc avatar tvthatsme avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

sanjinc

react-power-picture's Issues

Add TypeScript signatures

  • react-power-picture version: N/A
  • node version: N/A
  • npm (or yarn) version: N/A

Relevant code or config

What you did:

What happened:

Reproduction repository:

Problem description: Add TypeScript signatures

Suggested solution:

Dependency deprecation warning: travis-deploy-once (npm)

On registry https://registry.npmjs.org/, the "latest" version (v5.0.11) of dependency travis-deploy-once has the following deprecation notice:

We recommend to use Travis Build Stages instead

Marking the latest version of an npm package as deprecated results in the entire package being considered deprecated, so contact the package author you think this is a mistake.

Affected package file(s): package.json

If you don't care about this, you can close this issue and not be warned about travis-deploy-once's deprecation again. If you would like to completely disable all future deprecation warnings then add the following to your config:

"suppressNotifications": ["deprecationWarningIssues"]

Action Required: Fix Renovate Configuration

There is an error with this repository's Renovate configuration that needs to be fixed. As a precaution, Renovate will stop PRs until it is resolved.

File: renovate.json
Error type: The renovate configuration file contains some invalid settings
Message: Configuration option assignees should be a list (Array)

Add Flow signatures

  • react-power-picture version: N/A
  • node version: N/A
  • npm (or yarn) version: N/A
    Relevant code or config

What you did:

What happened:

Reproduction repository:

Problem description: Add Flow signatures

Suggested solution:

The automated release is failing 🚨

🚨 The automated release from the master branch failed. 🚨

I recommend you give this issue a high priority, so other packages depending on you could benefit from your bug fixes and new features.

You can find below the list of errors reported by semantic-release. Each one of them has to be resolved in order to automatically publish your package. I’m sure you can resolve this πŸ’ͺ.

Errors are usually caused by a misconfiguration or an authentication problem. With each error reported below you will find explanation and guidance to help you to resolve it.

Once all the errors are resolved, semantic-release will release your package the next time you push a commit to the master branch. You can also manually restart the failed CI job that runs semantic-release.

If you are not sure how to resolve this, here is some links that can help you:

If those don’t help, or if this issue is reporting something you think isn’t right, you can always ask the humans behind semantic-release.


Invalid npm token.

The npm token configured in the NPM_TOKEN environment variable must be a valid token allowing to publish to the registry https://registry.npmjs.org/.

If you are using Two-Factor Authentication, make configure the auth-only level is supported. semantic-release cannot publish with the default auth-and-writes level.

Please make sure to set the NPM_TOKEN environment variable in your CI with the exact value of the npm token.


Good luck with your project ✨

Your semantic-release bot πŸ“¦πŸš€

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.