Мой mapStateToProps не передает реквизиты компоненту - PullRequest
0 голосов
/ 21 сентября 2018

Я действительно новичок в разработке Redux.Только началось два дня назад

Раньше я использовал шаблон props - state, но я собираюсь изменить некоторые части шаблона props на Redux.

Сначала я покажу свои коды.index.js:

import React from 'react';
import ReactDOM from 'react-dom';
import ItemList from './itemList';
import SearchList from './searchList';
import {Provider,connect} from 'react-redux';
import {store} from './storeReducer';
import {backToMain} from './reduxAction';
class App extends React.Component{
    // not important some codes 
    render(){
        return(
            <div> 
                <section id="Search">
                    <form  action="//localhost:80/ReactStudy/travelReduxApp/public/server/itemList.php" id="Search" className="search" method="GET" onSubmit={this.submitForm}>
                        <input ref={'search'} placeholder="search country, attraction names" type="text" name="search"/>
                        <button type="submit">SEARCH</button>
                    </form>

                    <p className={this.state.validateError.display}>
                        {this.state.validateError.type=='invalid value'?
                            'Only english letters are available in this input'
                        : (this.state.validateError.type=='not found')?
                            'Nothing was found with this keyword. Try again'
                        :'Empty text field'
                        }

                    </p>
                </section>
                <ItemContainer initializeSearch={this.initializeSearch} searchList={this.state.searchItem}/>
            </div>
        )
    }
}

class ItemContainer extends React.Component{
    state={
        viewMain:true
    }
   //some codes
    showMain=()=>{
        this.setState({
            viewMain:true
        })
        this.props.initializeSearch();
        store.dispatch(backToMain());
    }

    render(){
        console.log('Item container');
        console.log(this.props);
        return(
            <section id="ItemContainer">
                {
                    this.props.searchList!=''?
                        <SearchList searchList={this.props.searchList} mainVisible={this.state.viewMain}/>
                    :
                        <ItemList toggleView={this.toggleView} mainVisible={this.state.viewMain}/>
                }
                <button onClick={this.showMain}>Back to main</button>
            </section>
        )
    }
}

const mapStateToProps =(state)=>{
    console.log('working');  //it doesn't show it.
    return{
        visible:state.visible
    }
};
const wrappedSearchList = connect(mapStateToProps,null)(ItemContainer);
const Root = () => (
    <Provider store={store}>
        <App/>
    </Provider>
);
ReactDOM.render(
    <Root/>,
    document.getElementById('App')
)

reduxAction.js

export function backToMain(){
        return{
            type:'BACK_TO_MAIN'
        }
    }

storeReducer.js

import {createStore} from 'redux';
import {backToMain} from './reduxAction';


export const initialState = {
    visible:true
}
export const store = createStore(viewMainReducer,initialState);
export function viewMainReducer(state=initialState,action){
    switch(action.type){
        case 'BACK_TO_MAIN':
            console.log('Back..');
            return{
                ...state,
                visible:true
            }
            break;
        default: return state;
    }
}

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

Проблема в том, что компонент ItemContainer отображается.Если я проверяю с помощью

console.log(this.props) 

в методе рендера ItemContainer, в консоли я вижу, что только initializeSearch и searchList передаются компоненту.Я не могу понять, почему мое видимое свойство объекта initialState не передается компоненту.Что может быть причиной?Что я должен сделать, чтобы передать свойство visible компоненту ItemContainer?

React / Redux: mapStateToProps фактически не отображает состояние на реквизиты

прочитайте эту ветку, но я просто не понял ...

1 Ответ

0 голосов
/ 21 сентября 2018

Попробуйте использовать wrappedSearchList вместо ItemContainer

<wrappedSearchList initializeSearch={this.initializeSearch} searchList={this.state.searchItem}/>**strong text**
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...