Как передать состояние линку из рич-роутера

ОБНОВЛЕННЫЙ КОД НЕ РАБОТАЕТ

Не удалось найти здесь ответ, который помог бы мне решить мою проблему.

В моем компоненте Playlist у меня есть изображение, которое указывает на новый путь для треков. Я хочу передать дорожке идентификатор списка воспроизведения, чтобы он мог отображать дорожки на основе предоставленного идентификатора, но независимо от того, как я это делаю, это не сработает для меня.

Компонент My Playlist возвращает:

 <Link to = '/tracks' state = {{playlist:playlist.id}}>
   <img alt = "album"src={playlist.images.url}/>
 </Link>

В моем компоненте Track он делает следующее:

export default class Tracks extends React.Component {
    constructor() {
        super();
        this.state = {
            playlistid: 0
        };
    }
        componentDidMount() {
            this.setState({
                playlistid: this.props.location.state.playlistid
            });
    }
    render() {
        return (
            <div>
                <p>PlaylistID: {this.state.playlistid}</p>
            </div>
        );
    }
}

Может ли кто-нибудь сказать мне, какой компонент неправильный? Извините, я все еще новичок в React

Спасибо


person Shauna    schedule 23.04.2020    source источник
comment
Ссылка из какой-то библиотеки? реагирующий маршрутизатор или досягаемый маршрутизатор?   -  person Shubham Khatri    schedule 23.04.2020
comment
это от рич-роутера. Это должно быть от реактивного маршрутизатора?   -  person Shauna    schedule 23.04.2020
comment
вы используете досягаемость маршрутизатора для всей своей маршрутизации?   -  person Shubham Khatri    schedule 23.04.2020
comment
@ShubhamKhatri Я да   -  person Shauna    schedule 23.04.2020
comment
Добавил ответ   -  person Shubham Khatri    schedule 23.04.2020
comment
Я обновил код, так как не уверен, какой компонент неправильный   -  person Shauna    schedule 25.04.2020


Ответы (2)


Чтобы передать состояние компоненту Link из маршрутизатора Reach, вы можете передать состояние как отдельную опору. Свойство to должно быть строкой

<Link
     to='/tracks'
     state= {{
        playlistid: playlist.id
     }}
 >
     <img alt = "album"src={image.url}/>
 </Link>

Для получения дополнительной информации см. Документацию по Link from Reach-router

РЕДАКТИРОВАТЬ:

То, как вы реализовали компонент Link, работает с компонентом response-router Link

person Shubham Khatri    schedule 23.04.2020
comment
Для приведенного выше кода я получаю сообщение об ошибке playlistid: playlist.id В нем говорится, что ожидается} - person Shauna; 23.04.2020
comment
Обновил ответ, отсутствовала скобка - person Shubham Khatri; 23.04.2020
comment
Проблема может заключаться в том, как я обрабатываю это в компоненте Track, поэтому я отредактировал свой код. - person Shauna; 25.04.2020
comment
@Steph Получаете ли вы какую-либо ошибку, потому что вы ее использовали правильно. Однако вам не нужно сохранять значение реквизита в состояние - person Shubham Khatri; 25.04.2020
comment
Да неужели? В моей консоли нет ошибок, которые помогут мне найти любую проблему, просто она ничего не отображает. - person Shauna; 25.04.2020
comment
В таком случае не могли бы вы создать небольшой ящик с кодами, чтобы воспроизвести вашу проблему. - person Shubham Khatri; 25.04.2020
comment
В таком случае не могли бы вы создать небольшой ящик с кодами, чтобы воспроизвести вашу проблему. - person Shubham Khatri; 25.04.2020
comment
О, я никогда не использовал это, прежде чем это классное приложение! Вот проблема: codeandbox.io/s/recursing- buck-iwvf2? file = / src / Playlist.jsx. - person Shauna; 25.04.2020
comment
Проблема заключалась в том, как вы устанавливаете состояние в playlist.jsx componentDidMount. setState - это функция. Рабочая демонстрация codeandbox.io/s/keen -edison-0pjxb? file = / src / - person Shubham Khatri; 25.04.2020
comment
О, это было так тяжело, я не могу поверить, насколько проста была эта ошибка. Большое вам спасибо, что вы не представляете, насколько я ценю это, я смотрю на это уже 3 дня. - person Shauna; 25.04.2020
comment
Ха-ха, случается со всеми нами. :-) - person Shubham Khatri; 25.04.2020

Вы можете попробовать это:

<Link to={{
        pathname: `/tracks/${playlist.id}`, //I assume you tracked the tracklist state here as a props 
      }}>
   <img alt = "album"src={image.url}/>
</Link>
person CanUver    schedule 23.04.2020
comment
Вышеупомянутый вариант не имеет обратной кавычки после {playlist.id}, и когда я добавляю его, он не распознается как строка и делает все после этого также строкой. - person Shauna; 23.04.2020
comment
Можете ли вы быть более откровенным? Может можно показать это каким-нибудь кодом? Я думаю, что понимаю вас, но я должен обязательно дать правильный ответ. - person CanUver; 23.04.2020
comment
Проблема может заключаться в том, как я обрабатываю это в компоненте Track, поэтому я отредактировал свой код. - person Shauna; 25.04.2020