V
Size: a a a
V
p
SV
p
SV
SV
SV
В
const useComponentWillUnmount = onUnmountHandler => {
useEffect(() => () => {
onUnmountHandler()
}, [])
}
/*
Example
*/
const UnMountComponent = () => {
useComponentWillUnmount(() => console.log('This component will unmount'))
return (
<div>Check your browser console</div>
)
}
SV
V
import React, { useState } from 'react'
import {connect} from "react-redux";
interface propsApp {
tracks?: string[],
onAddTrack?: any
}
const App:React.FunctionComponent<propsApp> = (props) => {
const {tracks, onAddTrack} = props
let [track, setTrack] = useState('')
let addTrack = () => {
onAddTrack(track)
setTrack('')
}
return (
<div className="container mt-100">
{tracks && tracks.map((track: string, index: number) => <li key={index}>{track}</li>)}
<div className="add-track">
<input onChange={(e) => setTrack(e.target.value)} value={track} type="text"/>
<button onClick={addTrack} className="btn btn-primary">Add track</button>
</div>
</div>
)
}
export default connect(
state => ({
tracks: state
}),
dispatch => ({
onAddTrack: (trackName: string) => {
dispatch({ type: 'ADD_TRACK', payload: trackName})
}
})
)(App)
S
import React, { useState } from 'react'
import {connect} from "react-redux";
interface propsApp {
tracks?: string[],
onAddTrack?: any
}
const App:React.FunctionComponent<propsApp> = (props) => {
const {tracks, onAddTrack} = props
let [track, setTrack] = useState('')
let addTrack = () => {
onAddTrack(track)
setTrack('')
}
return (
<div className="container mt-100">
{tracks && tracks.map((track: string, index: number) => <li key={index}>{track}</li>)}
<div className="add-track">
<input onChange={(e) => setTrack(e.target.value)} value={track} type="text"/>
<button onClick={addTrack} className="btn btn-primary">Add track</button>
</div>
</div>
)
}
export default connect(
state => ({
tracks: state
}),
dispatch => ({
onAddTrack: (trackName: string) => {
dispatch({ type: 'ADD_TRACK', payload: trackName})
}
})
)(App)
V
p
p
V
p
V
SV
p
p