arr.reduce((a, c, i) => {
if (c == arr[i - 1]) {
a[a.length - 1] += c;
} else {
a.push(c);
}
return a;
}, []);
componentDidMount() {
setTimeout(() => {
updateStore(1); // <--- WTF?
});
}
import React, { useRef, useCallback } from 'react';
import ReactDOM from 'react-dom';
import { Provider, connect } from 'react-redux';
import { createStore } from 'redux';
const UPDATE = 'UPDATE';
const update = (payload) => ({
type: UPDATE,
payload,
});
const reducer = (state = 0, action) => {
if (action.type === UPDATE) {
return action.payload;
}
return state;
}
const store = createStore(reducer);
const mapStateToProps = state => ({ state });
const mapDispatchToProps = { update };
const Header = ({ state }) => (
<div>Header. State: {state}</div>
);
const ConnectedHeader = connect(mapStateToProps)(Header);
const Body = ({ state, update }) => {
const inputEl = useRef(null);
const handler = useCallback(() => {
update(inputEl.current.value);
}, [inputEl, update]);
return (
<div>
<div>Body. State: {state}</div>
<input type="number" ref={inputEl} />
<button onClick={handler}>Update state</button>
</div>
);
}
const ConnectedBody = connect(
mapStateToProps,
mapDispatchToProps,
)(Body);
const App = () => (
<Provider store={store}>
<ConnectedHeader />
<ConnectedBody />
</Provider>
);
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
import React, { useState, useRef, useCallback, useMemo } from 'react';
import debounce from 'lodash/debounce';
import { fetchSomeData } from './someplace';
const Example = () => {
const [results, setResults] = useState([]);
const inputEl = useRef(null);
const handleTintClick = useCallback((value) => {
inputEl.current.value = value;
}, [inputEl]);
const handleInputChange = useMemo(() => debounce(e => {
const { value } = e.target;
if (value.length < 3) return;
fetchSomeData(value).then(setResults);
}, 800), []);
return (
<>
<input ref={inputEl} onChange={handleInputChange} />
{results.length > 0 && (
<ul>
{results.map((result, i) => (
<li
onClick={() => hanldeTintClick(result.title}}
key={result.id}
>
{result.title}
</li>
)}
</ul>
)}
</>
);
};
undefined || undefined && 'до этого места проверка не доходит'
undefined || 'что угодно' // 'что угодно'
undefined && 'что угодно' // undefined
npm run eject
на тестовом проекте и посмотреть в файлах config/webpack.config.js
, config/webpackDevServer.config.js
и scripts/start.js
как это все настроено и работает.npm run build
и откройте директорию build/static
, то увидите там все сгенерированные файлы. interface Filter {
name?: string;
title?: string;
}
interface FiltersProps {
filters: Filter[];
}
const Filters: React.FC<FiltersProps> = ({ filters }) => (
<div>
{filters.map((filter: Filter) => (
<div key={filter.name}>
{filter.title}
{filter.name}
</div>
))}
</div>
);
const Main: React.FC = () => (
<Filters filters={filters} />
);
'header'
вы присвоите вместо объекта null.var header = document.getElementById('header');
console.log(header); // null
true, потому что null относиться к объектам!
Получается, что null == undefined / true, но null === undefined/false?WTF JS?)
const str = `
<script>
console.log(1)
</script>
<script>
console.log(1)
</script>
`;
const head = document.getElementsByTagName('head')[0];
const script = document.createElement('script');
script.text = str.replace(/<[^>]*>?/gm, '');
head.appendChild(script);
import React from 'react';
import { render } from 'react-dom';
import { BrowserRouter } from 'react-router-dom';
import App from './App';
render(
<BrowserRouter>
<App />
</BrowserRouter>,
document.getElementById('root'),
);
import React from 'react';
import { render } from 'react-dom';
import { Router } from 'react-router';
import { createBrowserHistory } from 'history';
import App from './App';
const history = createBrowserHistory();
render(
<Router history={history}>
<App />
</Router>,
document.getElementById('root'),
);