admin管理员组文章数量:1323035
I'm trying to get the value of an input to be captured and then to update part of the URL with that value, all by doing a simple on click with React, ES6 etc. Basically a simple search functionality
So my ponent looks something like this:
class SearchInput extends Component {
constructor() {
super()
this.state = {
query: ''
}
}
ponentDidMount = () => {
const handleSearchURL = window.location('/search/'+this.state.query+'/some-action')
this.setState({
handleSearch: handleSearchURL
})
}
queryChange = (evt) => {
this.setState({query: evt.target.value})
}
render() {
const { handleSearch, placeholder } = this.props
return (
<form>
<input id="site-search" type="search" placeholder={placeholder} value={this.state.query} />
<input type="submit" value="Search" onClick={this.handleSearch} />
</form>
)
}
}
but this just gives me a lot of errors and it seems to don't like window.location. What's the best way to achieve this? I'm using react-router so I'm also happy if there is a better way with that
I'm trying to get the value of an input to be captured and then to update part of the URL with that value, all by doing a simple on click with React, ES6 etc. Basically a simple search functionality
So my ponent looks something like this:
class SearchInput extends Component {
constructor() {
super()
this.state = {
query: ''
}
}
ponentDidMount = () => {
const handleSearchURL = window.location('/search/'+this.state.query+'/some-action')
this.setState({
handleSearch: handleSearchURL
})
}
queryChange = (evt) => {
this.setState({query: evt.target.value})
}
render() {
const { handleSearch, placeholder } = this.props
return (
<form>
<input id="site-search" type="search" placeholder={placeholder} value={this.state.query} />
<input type="submit" value="Search" onClick={this.handleSearch} />
</form>
)
}
}
but this just gives me a lot of errors and it seems to don't like window.location. What's the best way to achieve this? I'm using react-router so I'm also happy if there is a better way with that
Share Improve this question asked Mar 16, 2017 at 8:44 ynterynter 2861 gold badge5 silver badges16 bronze badges4 Answers
Reset to default 2You can use "browserHistory"
from 'react-router'
and then push new url to here like this:
browserHistory.push('/search/{this.state.query}/some-action')
You can use browserHistory.push
or this.context.router.push
. also ponentDidMount is a lifeCycle function and doesnt require binding and is executed just once. You also need a handleSearch function and a onChange
event on input query change
class SearchInput extends Component {
constructor() {
super()
this.state = {
query: ''
}
}
static contextTypes = {
router: React.PropTypes.object
}
handleSearch = () => {
this.context.router.push(`'/search/${this.state.query}/some-action'`);
}
queryChange = (evt) => {
this.setState({query: evt.target.value})
}
render() {
const { handleSearch, placeholder } = this.props
return (
<form>
<input id="site-search" type="search" placeholder={placeholder} value={this.state.query} onChange={this.queryChange} />
<input type="submit" value="Search" onClick={this.handleSearch} />
</form>
)
}
}
This worked for me with react-hooks and react-router v5
import { useHistory } from 'react-router-dom';
const history = useHistory();
const handleSubmit = (e) => {
e.preventDefault();
history.push(`/search/${input}`);
};
see https://reactrouter./web/api/Hooks
function updateQueryStringParam(key, value, location) {
const urlQueryString = location.search;
const newParam = ${key}=${value}
;
let params = ?${newParam}
;
// If the "search" string exists, then build params from it
if (urlQueryString) {
const updateRegex = new RegExp(([?&])${key}[^&]*
);
const removeRegex = new RegExp(([?&])${key}=[^&;]+[&;]?
);
if (typeof value === 'undefined' || value == null || value === '') {
// Remove param if value is empty
params = urlQueryString.replace(removeRegex, '$1');
params = params.replace(/[&;]$/, '');
} else if (urlQueryString.match(updateRegex) !== null) {
// If param exists already, update it
params = urlQueryString.replace(updateRegex, `$1${newParam}`);
} else {
// Otherwise, add it to end of query string
params = `${urlQueryString}&${newParam}`;
}
}
// no parameter was set so we don't need the question mark return (params = params === '?' ? '' : params); }
const url = updateQueryStringParam('filter', inputValue, this.props.location);
this.props.history.push(url);
本文标签: javascriptUpdate URL with value from input on click with ReactStack Overflow
版权声明:本文标题:javascript - Update URL with value from input on click with React - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742107983a2421110.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论