Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Redux传奇在不经过传奇的情况下进行了更新_Javascript_Reactjs_Redux_Redux Saga - Fatal编程技术网

Javascript Redux传奇在不经过传奇的情况下进行了更新

Javascript Redux传奇在不经过传奇的情况下进行了更新,javascript,reactjs,redux,redux-saga,Javascript,Reactjs,Redux,Redux Saga,我是传奇世界的新手。虽然我在react nativeterritory上与thunk合作过,但我现在非常困惑。我正在努力使我的项目的框架,我希望得到非常大的很快。考虑到这一点,我正试图将逻辑分割成多个文件 我已经让减速器点火了,只是它不是我想要的方式。我甚至不知道这是怎么发生的。我的传奇故事没有发生,但是我的状态更新了。我从我的reducer中看到了控制台日志,但从saga watcher函数中看不到任何内容。我应该换什么 Index.js reducers/metastatereducer.j

我是传奇世界的新手。虽然我在
react native
territory上与
thunk
合作过,但我现在非常困惑。我正在努力使我的项目的框架,我希望得到非常大的很快。考虑到这一点,我正试图将逻辑分割成多个文件

我已经让减速器点火了,只是它不是我想要的方式。我甚至不知道这是怎么发生的。我的传奇故事没有发生,但是我的状态更新了。我从我的reducer中看到了控制台日志,但从saga watcher函数中看不到任何内容。我应该换什么

Index.js reducers/metastatereducer.js actions/metaStateActions.js actions/index.js sagas/metastatesagas.js 传奇/索引
redux saga
总是在尝试自行处理之前将操作传递给存储。因此,还原程序总是在任何saga行为执行之前运行


我认为错误在于您的
metaStateSagas
数组需要使用
takeEvery
,而不是
take
,但我不能完全确定。试试看它是否能解决问题。

谢谢您的回复。不过我很困惑。为什么它在传奇故事之前运行减速器?如果我需要更新值,然后更新状态,该怎么办?我将它改为takeEvery,现在我的传奇触发了第一个控制台日志,但仅此而已。中间件就是这样实现的-请参阅。这也意味着任何
yield select()
效果都使用最新状态。至于你的传奇,你真的把
{type:“SET_FILE_EXTENSION”}
发送到任何地方了吗?你的传奇故事被暂停,等待行动被发送,然后才继续。啊,我想我现在明白了。我在我的操作中使用
takeEvery(“设置文件扩展名”,watchFileExtension),
,在
watchFileExtension
saga中,我在同一
设置文件扩展名
上使用
take
。我想我应该使用类似于
TAKE\u FILE\u EXTENSION
的方法来获取值,然后在我的saga中使用
put('SET\u FILE\u EXTENSION')
来更新reducer中的状态。对吗?因为我想我正在发送
SET\u FILE\u EXTENSION
,这就是我的传奇故事如何展开的,但在它里面,我正在等待与take采取相同的行动。类似的事情,是的。我要说的是,我不确定你所尝试的是否真的是一个很好的传奇案例。如果你需要做的就是在状态中更新一个值,你不需要在第一个位置中间有一个故事。我只是想让基础开始。我将采取一个csv文件,使用papaparse读取标题(如果适用),让客户端调整ui内的布局,将值插入数据库,创建新表(如果需要),等等。它将变得越来越大。会有下拉列表,但我也需要做大量的ajaxing。我不想走恶作剧的路线,因为它让我在上一个项目中发疯。我不得不多次重组。我真的很感谢你的帮助。如果你有任何建议,请告诉我。
import React from 'react'
import { render } from 'react-dom'
import { createStore, applyMiddleware } from 'redux'
import createSagaMiddleware from 'redux-saga'
import { Provider } from 'react-redux'

import reducer from './reducers'
import rootSaga from './sagas'
import App from './App'

const sagaMiddleware = createSagaMiddleware()
const store = createStore( 
  reducer,
  applyMiddleware(sagaMiddleware)
)
sagaMiddleware.run(rootSaga)

render( 
  <Provider store={store}>
    <App /> 
  </Provider>, 
  document.getElementById("etlRootDiv"),
);
import React, { Component } from 'react'
import { connect } from 'react-redux'

import FileExtensionSelector from './components/FileExtensionSelector'
import { setFileExtension } from './actions'

class App extends Component {
  constructor(props) {
    super(props) 
  }

  handleTypeSelect() {
    console.log('handle more click'); 
    this.props.setFileExtension('zip');
    console.log(this.props);
  }

  componentWillReceiveProps(nextProps){
    console.log(nextProps);
  }

  render() {
    return (
      <div>
        <FileExtensionSelector onFileTypeSelect={this.handleTypeSelect.bind(this)} />
        <div>{this.props.fileType} ...asdasd</div>
      </div>
    )
  }
} 

const mapStateToProps = ({ metaState }) => {
  const { fileType } = metaState;
  return { fileType };
};
 
const mapDispatchToProps = (dispatch) => ({
  setFileExtension(ext) {
    dispatch(setFileExtension(ext))
  }
})

export default connect(mapStateToProps, mapDispatchToProps)(App)
import { combineReducers } from 'redux';
import metaState from './MetaStateReducer';
 
const rootReducer = combineReducers({
  metaState,
})

export default rootReducer
const INITIAL_STATE = {
  fileType: null,
  hasHeader: false,
};


export default function (state = INITIAL_STATE, action) {
  switch (action.type) {
    case 'SET_FILE_EXTENSION':
      console.log('/// in set file reducer ///');
      console.log(action);
      // console.log({ ...state, ...INITIAL_STATE, fileType: action.payload });
      return { ...state,...INITIAL_STATE, fileType: action.payload };
    default:
      return state;
  }
}
function action(type, payload = {}) {
  return { type, ...payload }
}

export const SET_FILE_EXTENSION = "SET_FILE_EXTENSION"; 
export const setFileExtension = (extension) => action( SET_FILE_EXTENSION, { payload: extension });
export { setFileExtension, SET_FILE_EXTENSION } from './metaDataActions';
import { take, put } from 'redux-saga/effects'
import { SET_FILE_EXTENSION } from '../actions';

function* watchFileExtension(ext) {
  console.log(' --- in watch file ext ---');
  const { extension } = yield take(SET_FILE_EXTENSION)
  console.log(`set extension is ${extension}`);
  // yield put({ type: 'SET_FILE_EXTENSION', payload: ext }); 
}


export const metaStateSagas = [
  take("SET_FILE_EXTENSION", watchFileExtension),
]
import { all } from 'redux-saga/effects'

import { metaStateSagas } from './MetaStateSagas';

export default function* rootSaga() {
  yield all([
    ...metaStateSagas,
  ])
}