我正在使用this.props然后数组选择来填充我的属性等。有没有更好的方法我可以通过道具来缩短this.props?还有其他人看到这个有什么问题吗?它仍然会自动滑动而不会受到控制"。
import React, { Component } from 'react';
import { Carousel as BSCarousel } from 'react-bootstrap';
class Carousel extends Component {
getInitialState() {
return {
index: 0,
direction: null,
};
}
handleSelect(selectedIndex, e) {
this.setState({
index: selectedIndex,
direction: e.direction,
});
}
render() {
return (
<BSCarousel activeIndex={this.state.index} direction={this.state.direction} onSelect={this.handleSelect}>
<BSCarousel.Item>
<img alt={this.props.alt} src={this.props.image} />
<BSCarousel.Caption>
<h3>{this.props.heading}</h3>
<p>{this.props.caption}</p>
</BSCarousel.Caption>
</BSCarousel.Item>
</BSCarousel>
);
}
}
export default Carousel;
修改
import React, { Component } from 'react';
import { Carousel as BSCarousel } from 'react-bootstrap';
class Carousel extends Component {
constructor(props) {
super(props);
this.state = { index: 0, direction: null };
this.handleSelect = this.handleSelect.bind(this);
}
render() {
const { alt, image, heading, caption } = this.props;
return (
<BSCarousel activeIndex={this.state.index} direction={this.state.direction} onSelect={this.handleSelect}>
<BSCarousel.Item>
<img alt={alt} src={image} />
<BSCarousel.Caption>
<h3>{heading}</h3>
<p>{caption}</p>
</BSCarousel.Caption>
</BSCarousel.Item>
</BSCarousel>
);
}
}
export default Carousel;
答案 0 :(得分:1)
有没有更好的方法我可以通过道具来缩短this.props?
使用解构
render() {
const {alt, image, heading, caption} = this.props
return (
<BSCarousel activeIndex={this.state.index} direction={this.state.direction} onSelect={this.handleSelect}>
<BSCarousel.Item>
<img alt={alt} src={image} />
<BSCarousel.Caption>
<h3>{heading}</h3>
<p>{caption}</p>
</BSCarousel.Caption>
</BSCarousel.Item>
</BSCarousel>
);
}
还有其他人看到这个有什么问题吗?
您需要先绑定handleSelect
,然后再将其作为回调
class Carousel extends Component {
constructor(props) {
super(props)
this.state = {/* initial state goes here*/}
this.handleSelect = this.handleSelect.bind(this)
}
... rest of your code
答案 1 :(得分:1)
您正在混合select distinct a.filename as arquivo_a , r.filename as arquivo_r
from table1 a
FULL JOIN table2 r ON SUBSTRING(a.filename,1,LEN(a.filename) - 4) = SUBSTRING(r.filename,1,LEN(r.filename) - 4)
编写React组件,es5 and es6
中没有getInitialState
方法。使用es6
初始化constructor
值。
像这样:
state
您可以在class Carousel extends Component {
constructor() {
super();
this.state = {
index: 0,
direction: null,
};
}
....
方法中使用Object destructuring,而不是访问this.props.key
,然后按键名称直接访问值,如下所示:
render
检查此代码段会引发错误,状态未定义:
render(){
const {alt, image, heading, caption} = this.props;
console.log(alt, image, heading, caption);
return (
<BSCarousel activeIndex={this.state.index} direction={this.state.direction} onSelect={this.handleSelect}>
<BSCarousel.Item>
<img alt={alt} src={image} />
<BSCarousel.Caption>
<h3>{heading}</h3>
<p>{caption}</p>
</BSCarousel.Caption>
</BSCarousel.Item>
</BSCarousel>
)
}
class App extends React.Component{
getInitialState(){
return {a:1}
}
render(){
return <div>Hello: {this.state.a}</div>
}
}
ReactDOM.render(<App/>, document.getElementById('app'))
答案 2 :(得分:1)
如果你厌倦了在任何地方看到 this.props ,你可以destructure这样的道具(与this.state相同,或者你想要分开的任何其他对象):
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id='app'/>
答案 3 :(得分:1)
因为您使用的是ES6类,所以必须以不同方式进行设置。
将您的getInitialState()
功能替换为:
constructor(props) {
super(props);
this.state = {
index: 0,
direction: null,
};
this.handleSelect = this.handleSelect.bind(this);
}
答案 4 :(得分:1)
你问过是否有办法清理你对this.props
的所有电话,所以这里的大部分答案都提到了解构,这是一种清理你this.anything
来电的好方法,但后来你也问过是否有人发现你的实现有什么问题,而且有些答案指出使用过时的getInitialState
(而只是在构造函数中设置你的初始组件级状态,赋值为{{ 1}}),但是其他答案还没有解决的问题是你的实施限制了你的&#34; Carousel&#34;只通过道具传递的单个项目。 您应该做的是允许自己灵活地通过道具将任意数量的项目传递到您的Carousel组件。
对我而言,如果它只允许通过道具传递单个项目,那么它将是一个高限制的Carousel组件。
所以这就是我要做的。这个实现:
this.state = {}
元素Carousel.Item
组件,该组件负责创建实际的CarouselItem
Carousel.Item
(当函数需要引用this
上下文时需要),this
<强>组件/ Carousel.js 强>
this
<强>部件/轮播/ CarouselItem.js 强>
import React, { Component } from 'react';
import { Carousel } from 'react-bootstrap';
import CarouselItem from './CarouselItem'; // 5
class CustomCarousel extends Component {
constructor(props) {
super(props);
this.state = { // 2
index: 0,
direction: null,
};
this.handleSelect = this.handleSelect.bind(this); // 6
}
handleSelect(selectedIndex, e) {
this.setState({
index: selectedIndex,
direction: e.direction,
});
}
generateItems() { // 4
const { items } = this.props;
return items.map((item, index) => {
const active = (index === item.id);
return (<CarouselItem
key={`CI${item.id}`}
active={active}
direction={this.state.direction}
{...item} // 7
/>);
});
}
render() {
return (
<Carousel
activeIndex={this.state.index}
direction={this.state.direction}
onSelect={this.handleSelect}
>
{this.generateItems()}
</Carousel>
);
}
}
export default CustomCarousel;
现在你有一个干净的Carousel组件,可以接受任何数量的潜在&#34;项目&#34;。
你可以这样打电话给你的自定义轮播:
import React from 'react';
import { Carousel } from 'react-bootstrap';
const CarouselItem = (props) => {
const { id, active, direction, image, alt, heading, caption } = props; // 1
return (
<Carousel.Item
index={id}
active={active}
direction={direction}
>
<img alt={alt} src={image} />
<Carousel.Caption>
<h3>{heading}</h3>
<p>{caption}</p>
</Carousel.Caption>
</Carousel.Item>
);
};
export default CarouselItem;