CircleCI Build Status Coverage Status License
React Wechat JSSDK component for SPA
$ yarn add react-wechat-api
This example is using react-router v4, but it's not required by reacth-wechat-api
Wechat.js
import React from "react"; import { Route } from "react-router-dom"; import { WechatAPIProvider } from "recat-wechat-api"; import wx from "weixin-js-sdk"; const getConfig = ({ url }) => fetch(`https://aweso.me/api/wx?url=${url}`).then(res => res.json()); /* should return an object like { appId: "wx05d8cb9deee3c05c", nonceStr: "nw0y6jnq1ie", signature: "e50d96cb73c09ba1e5848456d1ae90ec1b7ccf43", timestamp: 1541346529448 } */ const defaultShareData = { title: "Wechat API", desc: "Wechat API component for react", link: () => window.location.href, // will return latest URL dynamically imgUrl: `${window.location.origin}/icon.png` }; const defaultJsApiList = [ "onMenuShareTimeline", "onMenuShareAppMessage", "onMenuShareQQ", "onMenuShareQZone" ]; export default function Wechat(props) { return ( <Route> {({ location }) => ( <WechatAPIProvider {...props} location={location} // <-- `location` is required wx={wx} // <-- `wx` is required getConfig={getConfig} jsApiList={defaultJsApiList} shareData={defaultShareData} /> )} </Route> ); }
App.js
import React, { Component } from "react"; import { BrowserRouter, Route } from "react-router-dom"; import Wechat from "./Wechat"; import HomePage from "./containers/HomePage"; export default class App extends Component { render() { return ( <BrowserRouter> <Wechat> <Route path="/" component={HomePage} /> {/* other routes... */} </Wechat> </BrowserRouter> ); } }
HomePage.js
import React, { Component } from "react"; import { WechatAPI } from "recat-wechat-api"; export default class HomePage extends Component { state = { shareData: { title: "Awesome!!!" } }; render() { return ( <WechatAPI shareData={this.state.shareData}> <div> <h1>Awesome</h1> </div> </WechatAPI> ); } }
MIT