I am trying to implement a list of options using <form> and <select>. Researching on the web, I notice that this is used to redirect to sections of the same website, but I want to make it work so that the user display the options and when they click on submit it redirects them to an external website.
import React from 'react';
export default function App() {
function handleChange(value) {
// Do some stuff
}
return (
/* what i have tried using onChange */
<form >
<select value={data} onChange="this.options[this.selectedIndex].value && (window.location = this.options[this.selectedIndex].value);">
<option value="https://www.example.com">example</option>
<option value="https://www.example.com">example</option>
<option value="https://www.example.com">example</option>
</select>
<input type="submit" value="Submit"/>
</form>
/* */
)
}
Can I include inside some element like <option>"onChange method to_redirect='www.google.com'"</option> or what other way could make the website redirect users?
Advertisement
Answer
Navigating outside your application has nothing to do with react-router.
- Store the selection in a state variable
- On submit, use
window.locationto navigate to the chosen option
import { useState } from "react";
const options = [
{ value: "https://example.com/", label: "example" },
{ value: "https://example.com/", label: "example" },
{ value: "https://example.com/", label: "example" }
];
export default function App() {
const [url, setUrl] = useState("");
const handleSubmit = (e) => {
e.preventDefault();
window.location = url;
};
const handleChange = (e) => {
setUrl(e.target.value);
};
return (
<form onSubmit={handleSubmit}>
<select required onChange={handleChange} defaultValue="">
<option disabled hidden value="">
Select a destination
</option>
{options.map(({ value, label }, i) => (
<option key={i} value={value}>
{label}
</option>
))}
</select>
<button type="submit">Submit</button>
</form>
);
}