const Item = props => (
<li>{props.data.title}</li>
)
const List = props => (
<ul>{props.items.map(item => <Item data={item} />}</ul>
)
const ConnectedList = connect(
state => ({ items: state.someItems })
)(List)
const Item = props => (
<li>{props.data.title}</li>
)
const ConnectedItem = connect(
(state, props) => ({ data: state.someItems.entities[props.id] })
)(Item)
const List = props => (
<ul>{props.items.map(id => <ConnectedItem id={id} />}</ul>
)
const ConnectedList = connect(
state => ({ items: state.someItems.ids })
)(List)
class MyComponent extends PureComponent {
clickHandler = () => {
// Так как это стрелочная функция - она будет забиндена при создании элемента (объекта)
}
render() {
return (
<SearchCollection onClick={this.clickHandler}/>
)
}
}
class MyComponent extends PureComponent {
constructor(props, context) {
super(props, context)
this.clickHandler = this.clickHandler.bind(this)
}
clickHandler() {
}
render() {
return (
<SearchCollection onClick={this.clickHandler}/>
)
}
}
но на клиенте, как раз наоборот, если дела обстоят с промисами, то каждая цепочка вызова функцию ждут друг-друга, т.е поочередно.
return (
<El />
)
render() {
return this.renderChildren(this.props);
}
const app = express()
// раздача статики (css, fonts, images, ...)
app.use('/static/', express.static(__dirname + '/../../public/static'))
app.get('/*', (req, res) => {
res.send(/* ваш index.html */)
})
class MyElement extends Component {
componentDidMount() {
// начиная с этого момента у вас есть доступ к
// this.container - это ссылка на DOM ноду (или реакт-элемент)
jQuery(this.container) // например используем джейквери
// или вызовем метод элемента
// выведет в консоль 'Wow, so super!'
this.componentWithMethod.mySuperMethod()
}
handle3dPartyContainerRef = node => {
this.container = node
}
handleComponentRef= node => {
this.componentWithMethod= node
}
render() {
return (
<div>
<h1>Hello!</h1>
<div ref={this.handle3dPartyContainerRef} />
<ComponentWithMethod ref={this.handleComponentRef} />
</div>
)
}
}
class ComponentWithMethod extends Component {
mySuperMethod = () => {
// Вот так можно добавить метод к элементу
// вызывать его можно если получить ссылку на установленный в DOM элемент
console.log('Wow, so super!')
}
render() {
return (
<span>just a node</span>
)
}
}
<Router>
<App>
<Route exact path="/" component={Home}/>
<Route path="/item0" component={Item0}/>
<Route path="/item1" component={Item1}/>
</App>
</Router>,
<Router basename="/joonline"/>
<App>
<Route exact path="/" component={Home}/>
<Route path="/item0" component={Item0}/>
<Route path="/item1" component={Item1}/>
</App>
</Router>,
const datauri = new Datauri()
datauri.format('.png', imageBuffer)
console.log(datauri.content) //=> "data:image/png;base64,eGtjZA=="
class SearchResults extends React.PureComponent {
render() {
const { target, results } = this.props
return (
<div className="SearchResults">
{_
.chain(results)
.map(word => word.split(target))
.map(parts => _.reduce(
parts,
(res, part) => res.length > 0
? [ ...res, <span className="highlight">{target}</span>, part ]
: [ part ]
,
[]
))
.map(word => <span className="word">{word}</span>)
.value()
}
</div>
)
}
}
.map(word => word.split(target))
.map(parts => _.reduce(
parts,
(res, part) => res.length > 0
? [ ...res, <span className="highlight">{target}</span>, part ]
: [ part ]
,
[]
))
.map(word => <span className="word">{word}</span>)