Der Zweck der Entwicklung dieser Website besteht hauptsächlich darin, einige Notizen aufzuzeichnen und einige Informationen zusammenzufassen. Sie kann auch als ruhiger Ort in der Online-Welt angesehen werden, an dem Sie einige technische Ideen üben können.
Das Frontend der Website wurde zunächst mit vue
entwickelt, da der Entwicklungsfortschritt des Projekts nicht mehr so dringend war, hatte ich etwas Freizeit. Ich hatte React
noch nie benutzt und war immer noch besorgt darüber, also habe ich einfach React
verwendet, um das Frontend zu rekonstruieren.
Der einfachste Weg, eine neue Technologie zu erlernen, besteht natürlich darin, die relevanten Dokumente zu lesen. Da es sich um eine einseitige Anwendung handelt, kann das Front-End-Routing natürlich nicht weggelassen werden, und die Verwendung von React
würde sich umständlich anfühlen wenn Reduce
nicht verwendet wird, spielen sie keine Rolle (obwohl sie eigentlich keine notwendige Beziehung haben). Daher werden hier react
, react-router
verwendet. Ich freue mich, dass Sie diesen Artikel gelesen haben Ich übernehme keine Verantwortung, wenn Sie versehentlich in eine Grube geführt werden. react-redux
React
Als Erstes lesen Sie die Dokumentation von
für die Entwicklung vorzustellen, z. B. wie man React
und React
entwirft , wie man zwischen Komponenten kommuniziert und wie man Komponenten entwirft. Obwohl das Dokument es ausführlich vorstellt, erfordert es oft echte Übung, um die Schönheit zu entdecken. Beispielsweise besteht das Design von state
und props
aus zwei Komponenten state
und props
in einer X
-Komponente. Angenommen, die Y
-Komponente verfügt über ein Eingabefeld und die Z
-Komponente benötigt möglicherweise zu verwenden Y
Der von der Komponente eingegebene Wert ändert sich bis zu einem gewissen Grad. Natürlich ist es nicht unmöglich, sie zusammen zu schreiben, aber unter Berücksichtigung von Faktoren wie der Wiederverwendung von Komponenten und einzelnen Funktionen ist es sinnvoller, sie zu trennen Von welcher Komponente soll dieser Wert stammen? Was ist mit der Speicherung? Die folgenden beiden Komponenten sind Z
bzw. Y
. Dieses Design entspricht offensichtlich nicht dem Y
-Design und enthält zu viele redundante Teile. X
state
class InputComponent extends Component { constructor () { super()this.state = { value: ''} } valInput (e) { let value = e.target.valuethis.setState({value})this.props.inputChange(value) } render () {return <input onChange={this.valInput.bind(this)}/> } }
class ParentComponent extends Component { constructor () { super()this.state = { val: ''} } inputChange (val) {this.setState({val}) } render () {return ( <section>{this.state.val}<InputComponent inputChange={this.inputChange.bind(this)}/> </section> ) } }
class InputComponent extends Component { render () { let {val, inputChange} = this.props// 这里的val并不是必须的,但是当一个值来自非输入控件的时候,如可编辑的div,ace在每次执行render函数的时候都会导致原来输入的值被清空。return <input value={val} onChange={inputChange}/> } }
class ParentComponent extends Component { constructor () { super()this.state = { val: ''} } inputChange (e) {this.setState({val: e.target.value}) } render () { let val = this.state.valreturn ( <section>{val}<InputComponent val={val} inputChange={this.inputChange.bind(this)}/> </section> ) } }
). Sie müssen das Dokument dennoch sorgfältig lesen, um Zeitverschwendung bei der Lösung von Problemen während der Entwicklung zu vermeiden > react-router
kann als Standard-vue
verwendet werden, indem in der Unterroute ein Leerzeichen wie IndexRoute
verwendet wird. vue
''
UI
function root () { this.path = '/' this.component = require('pages/index').default}function demo () { this.path = 'demo' this.getComponent = (nextstate, cb) => { require.ensure([], (require) => { cb(null, require('pages/demo').default) }) } } const createRoute = (R) => { let route = new R() route.childRoutes = route.childRoutes && route.childRoutes.map(r => createRoute(r)) return route } export default [root, demo].map((route) => createRoute(route))
wurden auch einige Probleme festgestellt. Es lohnt sich auch darüber nachzudenken, wie verhindert werden kann, dass das Projekt schwierig zu warten ist. Eine Seite wurde mit der Methode „Seite + Komponente“ in der überarbeiteten Website entwickelt und stellt mit Ausnahme von Komponenten die fortschrittlichste Komponente dar. Nur die Seite kann react-redux
bis Redux
initiieren, was von allen mehreren Komponenten gemeinsam genutzt wird. Die Daten werden über Redux
auf der Seite an die Unterkomponente übergeben. Wenn die Unterkomponente Daten aktualisieren muss, wird der Befehl nach oben weitergeleitet, indem die von der übergeordneten Komponente über das Attribut dispatch
übergebene Methode aufgerufen wird reducer
auf der Seite, um action
anzugeben, um props
für die Datenaktualisierung aufzurufen. Natürlich ist es manchmal auch notwendig, props
einzugeben und dann von dispath
action
zu reducer
zu wechseln (z als Netzwerkanfragen). Es ist erwähnenswert, dass action
jedes Mal, wenn dispath
ein action
ist, alle registrierten reducer
durchläuft (Reduzierer bestehen häufig aus mehreren Unterreduzierern), was bedeutet, dass alle dispath
aufgerufen werden (von Projekt Die Leistung und Dokumentation sind wie folgt. Unten finden Sie den action
Teil des Codes, der von der überarbeiteten Website verwendet wird. Redux
reducer
reducer
reducer
export default class ArticleReducer { [AAS.ARTICLE_REQUEST_STATE] (state, action) {return Object.assign({}, state, {loading: action.loading}) } [AAS.ARTICLE_SEARCH_STATE] (state, action) {return Object.assign({}, state, {searching: action.searching}) } }
const reducers = {} const AR = new ArticleReducer() const NR = new NewsReducer() reducers.articles = (state = initState.article, action) => { return AR[action.type] ? AR[action.type](state, action) : state } reducers.editor = (state = initState.editor, action) => { return ER[action.type] ? ER[action.type](state, action) : state }
Abschließend muss ich die Bedeutung guter Programmiergewohnheiten beklagen. React
Das obige ist der detaillierte Inhalt vonErfahrung beim Schreiben einer Website mit React. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!