Ich habe Probleme mit dem Verständnis, warum Rendering nicht auftritt, wenn Render-Funktion zur Verfügung gestellt wird, anstatt JSX direkt zurückgeben.Reagieren nicht erneut Requisiten, wenn Render-Funktion zur Verfügung gestellt wird
Hier ist mein Beispiel InputBox Komponente:
export default React => {
const InputBox = ({ city, setCity, setTime }) => {
const onInputEnter = createOnInputEnter({ city, setCity, setTime, getCityTime })
return (
<div className='InputBox'>
<input
defaultValue={city}
onKeyPress={onInputEnter}
onFocus={moveFocusAtEnd}
autoFocus />
</div>
)
}
return InputBox
}
in diesem Fall Stadt wird jedes Mal, wenn ich redux Zustand der Stadt erneut gerendert ändern.
In diesem Beispiel wird die Stadt nur einmal übergeben und nicht neu gerendert, wenn sich der Reduxstatus ändert.
Ich möchte das letzte Beispiel verwenden, da ich die ComponentDidMount-Methode für die Initialisierung verwenden.
Ich verwende React und React-Redux in diesem Beispiel. Diese
ist, wie mein InputBox Container wie folgt aussieht:
import createInputBox from '../components/InputBox.js'
import { connect } from 'react-redux'
...
export default React => {
const InputBox = createInputBox(React)
const InputBoxWithReduxStore = connect(
({ city }) => ({ city }),
mapDispatchToProps
)(InputBox)
return InputBoxWithReduxStore
}
EDIT:
I-Code-Snippet bin auch zu zeigen, Implementierung von createOnInputEnter Funktion
function createOnInputEnter ({ city, setCity, setTime, getCityTime }) {
return async ({ key, target }) => {
if (key === 'Enter') {
try {
const inputCity = target.value
setTime('...')
const { city: resultCity, time: resultTime } = await getCityTime(inputCity)
setCity(resultCity)
setTime(resultTime)
} catch (err) {
const { city: resultCity, time: resultTime } = await getCityTime(city)
setCity(resultCity)
setTime(resultTime)
}
}
}
}
Als @zarcode mit vorgeschlagen Reagieren .Component, es entspricht nicht meinen Anforderungen. Da verwende ich klassenlose Komponenten. Mehr auf Mixin Teil: https://gist.github.com/jquense/47bbd2613e0b03d7e51c
Bitte fügen Sie es in https://codesandbox.io/s/new –
@RIYAJKHAN https://codesandbox.io/s/8kvozyw682 –
@PeterParada, wo rendert nicht –