Verwenden der vorgeschlagenen Methode: Dies ist das Ergebnis: Ein Link in der Schaltfläche , Code zwischen Kommentarzeilen
Ich habe mich gefragt, ob es eine Möglichkeit gibt, ein Link
Element mithilfe von "Reagieren" 'react-router'
in ein HTML- button
Tag einzuschließen.
Ich habe derzeit Link
Komponenten zum Navigieren in Seiten in meiner App, möchte diese Funktionalität jedoch meinen HTML-Schaltflächen zuordnen.
import { Button } from 'react-bootstrap';
.<a href="">
und das Ankertag darf kein Schaltflächen-Tag enthalten.history.push
Option zu verwendenLinkButton
Komponente - eine Lösung für React Router v4Zunächst ein Hinweis zu vielen anderen Antworten auf diese Frage.
⚠️ Verschachtelung
<button>
und<a>
ist kein gültiges HTML. ⚠️Jede Antwort hier, die vorschlägt, ein HTML
button
in eine React Router-Link
Komponente zu verschachteln (oder umgekehrt), wird in einem Webbrowser gerendert, ist jedoch kein semantisches, zugängliches oder gültiges HTML:☝ Klicken Sie hier, um dieses Markup mit validator.w3.org zu validieren. ☝
Dies kann zu Layout- / Stilproblemen führen, da Schaltflächen normalerweise nicht in Links platziert werden.
Verwenden eines HTML-
<button>
Tags mit der React Router-<Link>
Komponente.Wenn Sie nur ein HTML-
button
Tag möchten ...… Dann ist hier der richtige Weg, um eine Schaltfläche zu erhalten, die wie die
Link
Komponente von React Router funktioniert …Verwenden Sie den WithRouter HOC von React Router , um diese Requisiten an Ihre Komponente zu übergeben:
history
location
match
staticContext
LinkButton
KomponenteHier ist eine
LinkButton
Komponente zum Kopieren / Pasta :Importieren Sie dann die Komponente:
Verwenden Sie die Komponente:
Wenn Sie eine onClick-Methode benötigen:
Update: Wenn Sie nach einer anderen unterhaltsamen Option suchen, die nach dem Schreiben des oben genannten verfügbar gemacht wurde, sehen Sie sich diesen useRouter-Hook an .
quelle
<div> .. </div
Element von gehenApp.js
?import IconButton from '@material-ui/core/IconButton';
und stattdessen verwendet,<button />
und es hat großartig funktioniert.<a>
HTML-Tag visuell so zu gestalten, dass es wie eine "Schaltfläche" aussieht, dann erreicht die @ ChaseJames-Lösung dies. In der obigen Frage wird gefragt, wie ein<button>
HTML-Element verwendet werden soll, nicht ein<a>
.Warum nicht einfach das Link-Tag mit dem gleichen CSS wie eine Schaltfläche dekorieren?
quelle
Wenn Sie verwenden
react-router-dom
undmaterial-ui
Sie können verwenden ...Sie können mehr lesen hier .
quelle
to
AktivierungLink
obligatorisch ist.Sie können
useHistory
Hook seit React-Router v5.1.0 verwenden .quelle
Ich benutze Router und <Button />. Nein <Link />
quelle
onClick={ () => navigateTo(somePath) }
könnte diesen Ansatz verwenden. Ob Sie Redux verwenden undimport {push} from 'connected-react-router'
oder nurhistory.push
(oder ersetzen) wie in Ihrer Antwort.⚠️ Nein, das Verschachteln eines HTML- Codes in einem HTML- Code (oder umgekehrt) ist kein gültiger HTML-Code
button
a
quelle
width
undheight
.styled-components
. github.com/styled-components/styled-componentsFür alle, die nach einer Lösung mit React 16.8+ (Hooks) und React Router 5 suchen :
Sie können die Route mit einer Schaltfläche mit dem folgenden Code ändern:
React Router bietet einige Requisiten für Ihre Komponenten, einschließlich der push () - Funktion im Verlauf, die dem Element <Link to = 'path'> ziemlich ähnlich ist.
Sie müssen Ihre Komponenten nicht mit der Komponente höherer Ordnung "withRouter" umschließen, um Zugriff auf diese Requisiten zu erhalten.
quelle
BrowserRouter
(basierend auf der HTML-Verlaufs-API) anstelle von verwendenHashRouter
.Mit gestalteten Komponenten kann dies leicht erreicht werden
Entwerfen Sie zuerst einen gestalteten Knopf
überprüfen Heim gestylten Komponente für mehr
quelle
Viele der Lösungen haben sich darauf konzentriert, Dinge zu komplizieren.
Die Verwendung von withRouter ist eine sehr lange Lösung für etwas so Einfaches wie eine Schaltfläche, die auf eine andere Stelle in der App verweist.
Wenn Sie sich für SPA (Single Page Application) entscheiden, ist die einfachste Antwort, die ich gefunden habe, die Verwendung mit dem entsprechenden Klassennamen der Schaltfläche.
Dies stellt sicher, dass Sie den gemeinsamen Status / Kontext beibehalten, ohne Ihre gesamte App neu zu laden
quelle