Javascript-форум (https://javascript.ru/forum/)
-   Библиотеки/Тулкиты/Фреймворки (https://javascript.ru/forum/library-toolkit-framework/)
-   -   [React.js] Программный переход по УРЛ (https://javascript.ru/forum/library-toolkit-framework/82721-%5Breact-js%5D-programmnyjj-perekhod-po-url.html)

ksa 18.06.2021 20:12

[React.js] Программный переход по УРЛ
 
Пока не могу понять как програмно выполнить переход на некий УРЛ в пределах приложения.

Т.е. у нас есть роутинг по страницам, работает нормально (пример могу предоставить в понедельник)... По <Link> переход работает.
Но теперь нужно отработать событие нажатия на кнопку. Там идет отправка запросов на сервер и в случае успеха нужно выполнить переход на некую страницу (в пределах приложения SPA).

Нашел старые варианты, но они не рабочие (типа этого)
https://reactdev.ru/router/programmiruem_perehodi/

Aetae 19.06.2021 03:06

Шо?
const H = useHistory();

H.push('/foo')

Это еся юзается react-router. Мож у тя какой-то другой роутер?

ksa 19.06.2021 23:36

Цитата:

Сообщение от Aetae
Это еся юзается react-router. Мож у тя какой-то другой роутер?

Тестовый пример могу предоставить только в понедельник... Сейчас семья и дача. :D
Используем react-router или react-router-dom.

Цитата:

Сообщение от Aetae
useHistory()

У кого сей метод? Импортировать из react-router?

ksa 19.06.2021 23:42

Цитата:

Сообщение от Aetae
const H = useHistory();

Используя твою наводку, нашел еще такую статейку... :victory:
https://xakplant.ru/2019/07/16/ис...а-и-фун/

ksa 19.06.2021 23:51

Вот еще нашел видос и это и есть наш случай! :D

https://www.youtube.com/watch?v=VBw3EOtmz-k

У нас react-router-dom используется и роутинг как раз такой же.
Т.ч. завтра ребятам покажу - пусть пробуют.
Спасибо. :thanks:

ksa 21.06.2021 10:15

Провел ряд тестов "в поисках history"... :D

Если делать так

app.js
import React from 'react'
import {
	BrowserRouter,
	Route,
	Switch
} from 'react-router-dom'
import Home from './home'
import Test from './test'
import './app.css';

class App extends React.Component {
	render() {
		return (
			<BrowserRouter>
				<Switch>
					<Route exact path='/' component={Home}/>
					<Route path='/test' component={Test} />
				</Switch>
			</BrowserRouter>
		)
	}
}

export default App;

home.js
const Home = (props) => {
	console.log(props)
	function test() {
		alert('Ok')
	}
	return (
		<button onClick={test}>Go</button>
	)
}

export default Home

То history в props есть и можно делать
history.push('/test')


У нас же используется такой вариант роутинга
app.js
import React from 'react'
import {
	BrowserRouter,
	Route,
	Switch
} from 'react-router-dom'
import Home from './home'
import Test from './test'
import './app.css';

class App extends React.Component {
	constructor(props) {
		super(props)
		this.state = {primer: '123'}
	}
	render() {
		return (
			<BrowserRouter>
				<Switch>
					<Route exact path='/'>
						<Home  data={this.state} />
					</Route>
					<Route path='/test' component={Test} />
				</Switch>
			</BrowserRouter>
		)
	}
}

export default App;

И history уже нам не доступно. :(

ksa 21.06.2021 10:25

Цитата:

Сообщение от ksa
И history уже нам не доступно.

Если сделать, как советовал Aetae - уже работает и с нашим вариантом
home.js
import {useHistory} from 'react-router-dom'

const Home = (props) => {
	console.log(props)
	const h = useHistory()
	function test() {
		h.push('/test')
	}
	return (
		<button onClick={test}>Go</button>
	)
}

export default Home


Часовой пояс GMT +3, время: 09:29.