Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

aquibm/react-liquid

Repository files navigation

react-liquid

Liquid templating language component for React

NPM

Install

npm install --save react-liquid

or

yarn add react-liquid

Basic Usage

The component will automatically update when template or data are updated via state or props.

import React, { Component } from 'react'
import { ReactLiquid } from 'react-liquid'
class Example extends Component {
 render() {
 const template = 'Hello, {{ name }}'
 const data = {
 name: 'aquibm',
 }
 return <ReactLiquid template={template} data={data} />
 }
}

Extending the Liquid Engine

You can add your own filters and tags to the liquid engine, more information here.

import React, { Component } from 'react'
import { ReactLiquid, liquidEngine } from 'react-liquid'
class Example extends Component {
 constructor(props) {
 super(props)
 liquidEngine.registerFilter('add', (initial, arg1, arg2) => {
 return initial + arg1 + arg2
 })
 }
 render() {
 return <ReactLiquid template="{{ 1 | add: 2, 3 }}" />
 }
}

Rendering HTML

HTML can be dangerously injected by supplying the html prop

import React, { Component } from 'react'
import { ReactLiquid } from 'react-liquid'
class Example extends Component {
 render() {
 const template = '<p style="color: tomato;">{{ name }}</p>'
 const data = {
 name: 'aquibm',
 }
 return <ReactLiquid template={template} data={data} html />
 }
}

Custom rendering via render prop

You can render however you'd like by passing through a render prop

import React, { Component } from 'react'
import { ReactLiquid } from 'react-liquid'
class Example extends Component {
 render() {
 const template = '<p style="color: tomato;">{{ name }}</p>'
 const data = {
 name: 'aquibm',
 }
 return (
 <ReactLiquid
 template={template}
 data={data}
 render={(renderedTemplate) => {
 console.log('Woohoo! New Render!')
 return <span dangerouslySetInnerHTML={renderedTemplate} />
 }}
 />
 )
 }
}

useLiquid hook

From version 2.x onwards, you can render markdown using the useLiquid hook.

At the moment, we use JSON.stringify( data ) between render cycles to determine whether we need to re-render the markdown. This is inherently slow and should only be used when data is small and not overly nested. Read more here

import React from 'react'
import { useLiquid, RENDER_STATUS } from 'react-liquid'
const MyAwesomeComponent = ({ template, data }) => {
 const { status, markup } = useLiquid(template, data)
 return (
 <div>
 {status === RENDER_STATUS.rendering && <div>Rendering...</div>}
 <div dangerouslySetInnerHTML={{ __html: markup }} />
 </div>
 )
}

License

MIT © Aquib Master

About

Liquid templating language component for React

Topics

Resources

License

Stars

Watchers

Forks

Packages

Contributors

AltStyle によって変換されたページ (->オリジナル) /