Интересует вопрос, что лучше подойдет для этого? Знаю , что angular2 в разы превосходит react по производительности, но большинство "хейтят" ангулар и идут в сторону React
затем обращаться к компонентам react ( возможно ли обратиться извне? )
В планах создать социальную сеть.
Интересует вопрос, что лучше подойдет для этого?
class Avatar extends React.Component {
render() {
const finalClassName = 'avatar ' + (this.props.className || '')
return (
<img className={finalClassName} src={this.props.user.avatarUrl} alt={this.props.user.name} />
);
}
}
class UserInfo extends React.Component {
render() {
return (
<div className="user-info">
<Avatar className="user-info__avatar" user={this.props.user} />
<div className="user-info__name">{this.props.user.name}</div>
</div>
);
}
}
// выражение в скобочках нужно, чтобы не получилось 'avatar undefined', когда className не передан.
// Я рекомендую указать className, равное '', в defaultProps компонента Avatar
const finalClassName = 'avatar ' + (this.props.className || '')
const finalClassName = classnames({
'avatar': true,
[this.props.className]: !!this.props.className,
'some-other-class': someCondition
})
<Route path="/" component={App}>
<Route onEnter={checkAuth}>{/* Auth routes */}</Route>
{/* Home page route */}
<IndexRoute component={Home}>
{/* Other public routes /*}
<Route path="about" component={AboutPage} />
</Route>
return {
...state,
user: {
...state.user,
response: { ...action.payload },
}
}
function removeFromStructure(id) {
return { type: REMOVE_FROM_STRUCTURE, paylodad: id }
}
function doSomething(id) {
return { type: DO_SOMETHING, paylodad: id }
}
function commonAction(structureObject) {
return structureObject.blockId ? removeFromStructure(id) : doSomething(id)
}
match({ routes, location, [history], [...options] }, cb)
// автоматически создаст историю
match({ routes, location})
// автоматически создаст историю, при этом передав параметр someOption
// выглядеть это будет примерно так
// createMemoryHistory(options)
match({ routes, location, someOption })
// вы создаете историю сами (звучит эпично)
match({ routes, location, history })
match({ routes, location, basename: 'base' })
чтобы при заходе на localhost,сразу писалось типа такого localhost/base
const action = {
id: 132,
_key: 'some key',
_value: 564
}
return {
...state,
structure: {
...state.structure,
[id]: { ...(state.structure[id] || {}), ...action },
}
}
...(state.structure[id] || {})
import _ from 'lodash'
const { id, parentId } = action
// удаляем из структуры свойство с именем id
const nextStructure = _.omit(state.structure, id)
return {
...state,
structure: {
...nextStructure,
[parentId]: {
...nextStructure[parentId],
childIds: nextStructure[parentId].childIds.filter(cId => cId !== id)
}
}
}
const { id, parentId } = action
// в данном случае у нас будет переменная
// const removed = state.structure[id]
// а в переменную nextStructure попадут все значения, кроме id
const { [id]: removed, ...nextStructure } = state.structure
return {
...state,
structure: {
...nextStructure,
[parentId]: {
...nextStructure[parentId],
childIds: nextStructure[parentId].childIds.filter(cId => cId !== id)
}
}
}
// JavaScript module import
import { browserHistory } from 'react-router'
const goBack = () => browserHistory.previous()
<button type="button" onClick={goBack}>Назад</button>
shouldComponentUpdate(nextProps, nextState) {
return shallowCompare(this, nextProps, nextState);
}
<html>
<head>
<script>
window.__INITIAL_DATA__ = <?= printInitialData() ?>
</script>
</head>
<body>
<div class="reactRoot"></div>
<script src="bundle.js" />
</body>
</html>
constructor(props) {
super(props);
this.state = {
activeIndex : 0
};
}
const store = createStore(history, client, initialState)
store.dispatch(appActions.loadInitialData())
render((
<Provider store={store}>
<Router history={finalHistory}>
{routes}
</Router>
</Provider>
), reactRootElement)
function loadInitialData() {
return dispatch => axios
.get(`${apiPrefix}/entities`)
.then(entities => dispatch(saveEntities(entities)))
}