В официальных документах написано React will attempt to attach event listeners to the existing markup.
Поэтому я подумал, что если я использую ReactDOM.hydrate, он будет только добавлять события.
// server.js
app.get('/', (req, res) => {
const html = fs.readFileSync(path.resolve('./build/index.html'), 'utf8');
return res.send(
html.replace(
'<div id="root"></div>',
'<div id="root">hihi</div>',
),
);
}
// index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
ReactDOM.hydrate(
<App/>,
document.getElementById('root'),
);
// App.jsx
import React from 'react';
import styled from 'styled-components';
export default () => {
return <Title}>Hi !</Title>;
};
const Title = styled.h1`
color: blue;
`;
Однако, когда работает гидрат, он удаляет DOM, созданный SSR, и заменяет его на DOM созданный CSR (сценарий реакции)
Почему это происходит?