Javascript 使用innerHTML插入JSX
我试图将下面的JSX插入我的标记中,但一旦插入,我就会得到一个[object,object]。如何将这张JSX放入我的div中 调用以插入JSX的函数:Javascript 使用innerHTML插入JSX,javascript,html,css,reactjs,Javascript,Html,Css,Reactjs,我试图将下面的JSX插入我的标记中,但一旦插入,我就会得到一个[object,object]。如何将这张JSX放入我的div中 调用以插入JSX的函数: placeInDiv = (arr) => { if (this.arrowRef.current !== null) { this.arrowRef.current.innerHTML = <div className={`${this.sliderData.length === 5 ? 'd-xl-
placeInDiv = (arr) => {
if (this.arrowRef.current !== null) {
this.arrowRef.current.innerHTML = <div className={`${this.sliderData.length === 5 ? 'd-xl-none' : ''} arrow-container`}>
{arr[0] == true &&
<img onClick={() => this.setDirection("previous")} className="arrow-left" src={ArrowRight} /> }
{arr[1] == true &&
<img onClick={() => this.setDirection("next")} src={ArrowRight} /> }
</div>
}
}
placeInDiv=(arr)=>{
如果(this.arrowRef.current!==null){
this.arrowRef.current.innerHTML=
{arr[0]==true&&
}
{arr[1]==true&&
}
}
}
标记:
<div className="ggg" id="arrows" ref={this.arrowRef}>
</div>
解决这个问题有很大困难,请帮忙
下面是完整的代码块,演示了我试图实现的目标。如您所见,该函数在渲染中被调用,并传递特定的参数
完整代码块:
import Carousel from 'react-elastic-carousel';
import top from '../images/top.png';
import ArrowRight from '../images/arrowRight.svg';
import React, {Component} from 'react';
class contentSlider extends Component {
state = {
disabled: '',
leftArrow: false,
rightArrow: true
}
componentDidMount() {
}
arrowRef = React.createRef();
sliderData = [
{
title: 'POLO',
typeOfcontent: 'Mens T-Shirt',
rrp: '£105',
ourPrice: '£55',
salePrice: '£45',
image: top
},
{
title: 'POLO',
typeOfcontent: 'Mens T-Shirt',
rrp: '£105',
ourPrice: '£55',
salePrice: '£45',
image: top
},
{
title: 'POLO',
typeOfcontent: 'Mens T-Shirt',
rrp: '£105',
ourPrice: '£55',
salePrice: '£45',
image: top
},
{
title: 'POLO',
typeOfcontent: 'Mens T-Shirt',
rrp: '£105',
ourPrice: '£55',
salePrice: '£45',
image: top
},
{
title: 'POLO',
typeOfcontent: 'Mens T-Shirt',
rrp: '£105',
ourPrice: '£55',
salePrice: '£45',
image: top
},
{
title: 'POLO',
typeOfcontent: 'Mens T-Shirt',
rrp: '£105',
ourPrice: '£55',
salePrice: '£45',
image: top
},
{
title: 'POLO',
typeOfcontent: 'Mens T-Shirt',
rrp: '£105',
ourPrice: '£55',
salePrice: '£45',
image: top
}
]
breakPoints = [
{ width: 2, itemsToShow: 2, itemsToScroll: 2 },
{ width: 550, itemsToShow: 3, itemsToScroll: 3},
{ width: 850, itemsToShow: 4, itemsToScroll: 3 },
{ width: 970, itemsToShow: 4, itemsToScroll: 3 },
{ width: 1150, itemsToShow: 5, itemsToScroll: 3 },
]
setDirection = (slideDirection) => {
switch(slideDirection) {
case "next":
this.carousel.slideNext();
let slideNext = document.getElementById('slider-move');
if(slideNext.classList.contains('test-right')) {
slideNext.classList.remove('test-right');
slideNext.classList.add('test-left');
}
break;
case "previous":
this.carousel.slidePrev();
let slidePrevious = document.getElementById('slider-move');
if(slidePrevious.classList.contains('test-left')) {
slidePrevious.classList.remove('test-left');
slidePrevious.classList.add('test-right');
}
break;
}
}
getAmountOfPages = (pages, activePage ) => {
let firstItem = pages[0];
let [lastItem] = pages.slice(-1);
let array = [];
if(firstItem === activePage) {
array.push(false, true);
return array;
} else if(lastItem === activePage) {
array.push(true, false);
return array;
} else {
array.push(true, true);
return array;
}
}
placeInDiv = (arr) => {
if (this.arrowRef.current !== null) {
ReactDOM.render( this.arrowRef.current.innerHTML = <div className={`${this.sliderData.length === 5 ? 'd-xl-none' : ''} arrow-container`}>
{arr[0] == true &&
<img onClick={() => this.setDirection("previous")} className="arrow-left" src={ArrowRight} /> }
{arr[1] == true &&
<img onClick={() => this.setDirection("next")} src={ArrowRight} /> }
</div>, this.arrowRef.current)
}
}
render() {
return (
<div className="content-slider-wrapper">
<div className="content-slider-title">
<span>PRODUCTS OF THE WEEK</span>
</div>
<div className={`${this.sliderData.length === 5 ? 'mt-xl-5' : ''} content-slider-container`}>
<div className="test-right" id="slider-move">
<Carousel
ref={ref => (this.carousel = ref)}
breakPoints={this.breakPoints}
disableArrowsOnEnd={true}
renderPagination={({ pages, activePage, onClick }) => {
let arr;
arr = this.getAmountOfPages(pages, activePage);
this.placeInDiv(arr);
return (
<>
<div className={`${this.sliderData.length === 5 ? 'd-xl-none' : ''} black-slider-container`}>
{pages.map(page => {
const isActivePage = activePage === page
return (
<div className={isActivePage ? 'black-slider' : 'blank-slider'}
key={page}
onClick={() => onClick(page)}
active={isActivePage}
/>
)
})}
</div>
</>
)
}}
>
{this.sliderData.map((item, index) => (
<div key={index} className="carousel-item-container">
<div className="carousel-image-container">
<img src={top} />
</div>
<div className="carousel-text-container">
<ul>
<li className="carousel-text-container-title">{item.title}</li>
<li className="carousel-text-container-text">{item.typeOfProduct}</li>
<li className="carousel-text-container-text line-through">RRP {item.rrp}</li>
<li className="carousel-text-container-text line-through">Our Price: {item.ourPrice}</li>
<li className="carousel-text-container-text">Sale Price: {item.salePrice}</li>
</ul>
</div>
</div>
))}
</Carousel>
</div>
</div>
<div className="ggg" id="arrows" ref={this.arrowRef}>
<p>dasda</p>
</div>
</div>
)
}
}
export default contentSlider;
从“react elastic Carousel”导入转盘;
从“../images/top.png”导入顶部;
从“../images/ArrowRight.svg”导入ArrowRight;
从“React”导入React,{Component};
类contentSlider扩展组件{
状态={
已禁用:“”,
左箭头:错,
向右箭头:对
}
componentDidMount(){
}
arrowRef=React.createRef();
滑块数据=[
{
标题:"马球",,
内容类型:“男士T恤”,
rrp:'105英镑',
我们的价格:'55英镑',
售价:45英镑,
图片:顶部
},
{
标题:"马球",,
内容类型:“男士T恤”,
rrp:'105英镑',
我们的价格:'55英镑',
售价:45英镑,
图片:顶部
},
{
标题:"马球",,
内容类型:“男士T恤”,
rrp:'105英镑',
我们的价格:'55英镑',
售价:45英镑,
图片:顶部
},
{
标题:"马球",,
内容类型:“男士T恤”,
rrp:'105英镑',
我们的价格:'55英镑',
售价:45英镑,
图片:顶部
},
{
标题:"马球",,
内容类型:“男士T恤”,
rrp:'105英镑',
我们的价格:'55英镑',
售价:45英镑,
图片:顶部
},
{
标题:"马球",,
内容类型:“男士T恤”,
rrp:'105英镑',
我们的价格:'55英镑',
售价:45英镑,
图片:顶部
},
{
标题:"马球",,
内容类型:“男士T恤”,
rrp:'105英镑',
我们的价格:'55英镑',
售价:45英镑,
图片:顶部
}
]
断点=[
{width:2,itemsToShow:2,itemsToScroll:2},
{width:550,itemsToShow:3,itemsToScroll:3},
{width:850,itemsToShow:4,itemsToScroll:3},
{width:970,itemsToShow:4,itemsToScroll:3},
{width:1150,itemsToShow:5,itemsToScroll:3},
]
设置方向=(滑动方向)=>{
开关(滑动方向){
案例“下一个”:
这个.carousel.slideNext();
让slideNext=document.getElementById('slider-move');
if(slideNext.classList.contains('test-right')){
slideNext.classList.remove('test-right');
添加('test-left');
}
打破
“以前”一案:
this.carousel.slidePrev();
让slidePrevious=document.getElementById('slider-move');
if(slidePrevious.classList.contains('test-left')){
slidePrevious.classList.remove('test-left');
slidePrevious.classList.add('test-right');
}
打破
}
}
GetAmountOffPage=(页面,活动页面)=>{
设firstItem=pages[0];
let[lastItem]=pages.slice(-1);
让数组=[];
如果(firstItem==activePage){
array.push(false,true);
返回数组;
}else if(lastItem==activePage){
array.push(真、假);
返回数组;
}否则{
array.push(true,true);
返回数组;
}
}
placeInDiv=(arr)=>{
如果(this.arrowRef.current!==null){
ReactDOM.render(this.arrowRef.current.innerHTML=
{arr[0]==true&&
}
{arr[1]==true&&
}
,此为.arrowRef.current)
}
}
render(){
返回(
本周产品
(this.carousel=ref)}
断点={this.breakPoints}
disableArrowsOnEnd={true}
renderPagination={({pages,activePage,onClick})=>{
让arr;
arr=this.getamountofpage(pages,activePage);
本.placeInDiv(arr);
返回(
{pages.map(页面=>{
常量isActivePage=activePage==page
返回(
单击(第页)}
活动={isActivePage}
/>
)
})}
)
}}
>
{this.sliderData.map((项,索引)=>(
- {item.title}
- {item.typeOfProduct}
通过“>RRP{item.RRP}
我们的价格:{item.ourPrice}
销售价格:{item.salePrice}
))}
达斯达
)
}
}
导出默认内容滑块;
您是否希望JSX被解释或只是按原样呈现(作为字符串)?因为innerHTML DOMstring值是由浏览器解析的,它不处理任何JSX转换。这是在JavaScript到达目标之前由Babel处理的
const div = <div className={`${this.sliderData.length === 5 ? 'd-xl-none' : ''} arrow-container`}>
{arr[0] == true &&
<img onClick={() => this.setDirection("previous")} className="arrow-left" src={ArrowRight} /> }
{arr[1] == true &&
<img onClick={() => this.setDirection("next")} src={ArrowRight} /> }
</div>
ReactDOM.render(div, this.arrowRef.current)