我有一个react小部件,可从API(例如:https://api.prime.com/v1/business/rating/${id}
)中获取数据
在此示例中,呈现了带有${id}
的信息列表。
我现在想做的是通过脚本的url参数获取ID:
<script src="https://fr.prime.com/rating-widget/merchantidentifier"></script>
7182
下面的代码中,是merchantidentifier
。
merchantidentifier
是变量,在此示例中,7182
进入reactDOM.render()
要在商人网站上显示小部件,我们需要添加脚本标签,在此示例中为<script src="https://fr.prime.com/rating-widget/7182"></script>
如何将merchantidentifier
从URL传递到React应用
var React = require('react');
import axios from 'axios';
import '../node_modules/cleanslate/cleanslate.css';
import './style.scss';
class Widget extends React.Component {
constructor(props){
super(props);
this.state = {}
}
componentDidMount() {
let id = this.props.id;
axios.get(`https://api.prime.com/v1/business/rating/${id}`)
.then((res) => {
const brand = res.data;
this.setState({
rating: brand.rating,
logo : brand.logo,
name: brand.name,
stars: brand.stars,
url: brand.url
});
});
}
render() {
return (
<div className="cleanslate">
<a href={this.state.url} target="_blank">
<img src="https://fr.prime.com/img.svg" alt="" />
<div className="rating-box">
<img src={this.state.logo} className="the-logo" alt={this.state.name} />
<span className="the-note">{this.state.rating}/10</span>
<div id="Star" className={`stars-${this.state.stars}`}></div>
</div>
</a>
</div>
)
}
}
ReactDOM.render(
<Widget id="7182" />,
document.getElementById('root')
);
答案 0 :(得分:0)
由于script
标记是静态的,尽管merchantidentifier
是静态的,但它在运行时不会改变。
您可以使用.env
文件存储merchantidentifier
并在需要时使用而无需显式传递。
在项目的根文件夹中创建.env
文件
REACT_APP_MERCHANT_IDENTIFIER = 7182
现在您可以在HTML
和JS
文件中使用它。
您可以在HTML
文件中使用
<script src="https://fr.prime.com/rating-widget/%REACT_APP_MERCHANT_IDENTIFIER%"></script >
在JS
文件中,
componentDidMount() {
let id = process.env.REACT_APP_MERCHANT_IDENTIFIER;
axios.get(`https://api.prime.com/v1/business/rating/${id}`)
...
}
答案 1 :(得分:0)
因为您没有使用react-router,所以我唯一想到的
constructor(props){
super(props);
this.state = {}
this.id = '0';
var urlComponents = window.location.href.split('/');
if(urlComponents[urlComponents.length-2] === 'rating-widget') {
this.id = urlComponents[urlComponents.length-1];
}
}
在componentDidMount中使用这样的
componentDidMount() {
let id = process.env.REACT_APP_MERCHANT_IDENTIFIER;
axios.get(`https://api.prime.com/v1/business/rating/${this.id}`)
...
}