小编kar*_*017的帖子

为什么 useEffect 不会在 window.location.pathname 更改时运行?

为什么useEffect不会在window.location.pathname更改时运行?我loc只登录一次。

当路径名更改而没有任何其他库时,如何运行useEffect

  useEffect(() => {
    const loc = window.location.pathname
    console.log({ loc })
  }, [window.location.pathname])
Run Code Online (Sandbox Code Playgroud)

reactjs

15
推荐指数
3
解决办法
7797
查看次数

使用react-router-dom中的Link时,为什么在'History'上无法执行'pushState'?

我看过类似的帖子,但找不到答案,就我而言,我正试图通过以下方式采取行动<App />

  addExpense = (expense) => {
    console.log('Hello From AddExpenseForm');
  }
Run Code Online (Sandbox Code Playgroud)

/create路线在那里我渲染<AddExpenseForm />组件

<Link to={{
  pathname: '/create',
  state: { addExpense: this.addExpense }
}}> Create Expense</Link>
Run Code Online (Sandbox Code Playgroud)

链接已呈现,但是当我单击它时,控制台出现错误:

Uncaught DOMException: Failed to execute 'pushState' on 'History': function (expense) {
      console.log('Hello From addExpense');
    } could not be cloned
Run Code Online (Sandbox Code Playgroud)

为什么会这样,这里的解决方法是什么?

我更新的代码:

Index.js中的路由:

const Routes = () => {
  return (
      <BrowserRouter>
        <Switch>
          <Route path="/" exact component={App} />
          <Route path="/create" exact component={AddExpenseForm}/>
          <Route path="/expense/:expenseId" name="routename" component={ExpenseDetails} />
          <Route component={NotFound} …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-router

8
推荐指数
2
解决办法
8715
查看次数

如何使用 react-pdf 下载 pdf 文件 onClick?

我想从 UI 生成 pdf 并下载它。一直在寻找文档,但找不到如何实现 IeonClick={this.downloadPdf}

这是模块参考:https : //github.com/diegomura/react-pdf

它说: 保存在文件中

import React from 'react';
import ReactPDF from '@react-pdf/react-pdf';

ReactPDF.render(<MyDocument />, `${__dirname}/example.pdf`);
Run Code Online (Sandbox Code Playgroud)

但这对我来说没有多大意义。

reactjs

8
推荐指数
2
解决办法
2万
查看次数

如何在没有异步/等待的情况下从待解决的承诺中获取数据?

我有抽象:

\n\n
function fetchDataFromAPI() {\n  const url = `https://api...`\n  return fetch(url).then(response => response.json())\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想在我的其他代码中使用它,例如:

\n\n
if(something){\n  const data = fetchDataFromAPI()\n  return data \n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果我的console.log数据得到解决,等待承诺

\n\n
Promise\xc2\xa0{<pending>}\n  __proto__: Promise\n  [[PromiseStatus]]: "resolved"\n  [[PromiseValue]]: Object\n
Run Code Online (Sandbox Code Playgroud)\n\n

我如何获取该对象data而不是 Promise?

\n

javascript promise

8
推荐指数
1
解决办法
3万
查看次数

为什么没有定义 AbortController?

我希望能够使用 fetch API 取消请求并使用new AbortController()不幸的是我在控制台中收到一个错误:AbortController is not defined

//  this.aborter = new XMLHttpRequest()  no error
    this.aborter = new AbortController() error
Run Code Online (Sandbox Code Playgroud)

可能是什么原因?我只使用 vanilla JS,没有任何依赖项。

javascript fetch

8
推荐指数
2
解决办法
1万
查看次数

如何在样式组件中使用网格模板区域与反应?

我正在尝试制作一个网格,在其中定义区域,但网格布局在屏幕上不起作用。我不确定如何调试它。在我看来,我已经正确地定义了一切。我缺少什么?

const GridLayout = styled.div`
  height: 100vh;
  display: grid;
  grid-template-areas:
    'nav nav nav'
    'aside main aside'
    'footer footer footer';
  grid-template-rows: 1fr 9fr 1fr;
  grid-template-columns: 1fr 6fr 1fr;
`;

const Nav = styled.nav`
  grid-area: nav;
`;
const Aside = styled.aside`
  grid-area: aside;
`;
const Main = styled.main`
  grid-area: main;
`;
const Footer = styled.footer`
  grid-area: footer;
`;

function App() {
  return (
    <>
      <GlobalStyle globalProps={globalProps} />
      <ThemeProvider theme={theme}>
        <GridLayout>
          <Nav>Nav Area</Nav>
          <Aside />
          <Main>Main area</Main>
          <Aside />
          <Footer>Footer area</Footer>
        </GridLayout>
      </ThemeProvider> …
Run Code Online (Sandbox Code Playgroud)

css reactjs styled-components

7
推荐指数
1
解决办法
6854
查看次数

如何中止获取请求并立即开始一个新的请求?

下面是来自 MDN 的一个例子。有两个按钮。一个是发送请求,另一个是取消。

var controller = new AbortController();
var signal = controller.signal;

var downloadBtn = document.querySelector('.download');
var abortBtn = document.querySelector('.abort');

downloadBtn.addEventListener('click', fetchVideo);

abortBtn.addEventListener('click', function() {
  controller.abort();
  console.log('Download aborted');
});

function fetchVideo() {
  ...
  fetch(url, {signal}).then(function(response) {
    ...
  }).catch(function(e) {
    reports.textContent = 'Download error: ' + e.message;
  })
}
Run Code Online (Sandbox Code Playgroud)

现在我的情况不同了。我有一个query参数,如果正在获取但尚未完成且query参数更改 - 如何发送新请求并自动取消前一个请求?

javascript fetch promise

5
推荐指数
1
解决办法
2283
查看次数

如何用玩笑模拟和测试链式函数?

我的组件 useEffect 钩子中有这个函数链。我将响应/数据设置为我的组件状态,以便我可以在我的组件中呈现数据。

client
  .items()
  .type("client")
  .toObservable()
  .subscribe(response => {
    setState(response)
  })
Run Code Online (Sandbox Code Playgroud)

我如何模拟这个函数并在组件在我的测试中呈现之前调用它?我正在使用测试库/反应。

回应是 {items: [{},...]}, somethingElse: {}

javascript mocking jestjs react-testing-library

5
推荐指数
1
解决办法
4305
查看次数

有没有办法在 createSlice 中访问全局状态?

下面是一个例子:

const user = createSlice({
  name: 'user',
  initialState: { name: '', age: 20 },
  reducers: {
    setUserName: (state, action) => {
      state.name = action.payload // mutate the state all you want with immer
    }
  },
  // "map object API"
  extraReducers: {
    [counter.actions.increment]: (state, action) => {
      state.age += 1
    }
  }
})
Run Code Online (Sandbox Code Playgroud)

我可以访问计数器状态吗?假设我只想在计数器为 30 时增加年龄。否则,当useEffect钩子中的计数发生变化时,我需要监听并调度一些处理年龄增加(?)的动作。

换句话说,根据当前全局状态使用 计算状态切片的最佳方法是redux-toolkit什么?

reactjs redux redux-toolkit

4
推荐指数
1
解决办法
3751
查看次数

axios GET请求功能在反应中导出/导入

如何从单独的.js文件导出axios获取请求,以便可以通过导入ie在main.js中使用它:

import { getNewQuote }  from './api'

class App extends Component {

  constructor () {
    super();
    this.state = {
      quote: []
    }
    this.handleNewQuote = this.handleNewQuote.bind(this);
  }
  componentDidMount() {
    getNewQuote();
  }

  handleNewQuote() {
    getNewQuote();
  }
   ...
Run Code Online (Sandbox Code Playgroud)

我的api.js看起来像这样:

export function getNewQuote(){
    axios.defaults.baseURL = 'https://andruxnet-random-famous-quotes.p.mashape.com';
    axios.defaults.headers.common['X-Mashape-Key'] = "MY-API-KEY";
    axios.get('/?cat=famous&count=1')
      .then(res => {
        this.setState({ quote: res.data })
      })
      .catch(error => {
        console.log(error)
      })
}
Run Code Online (Sandbox Code Playgroud)

通过此设置,我在控制台中遇到错误:

TypeError:无法读取api.js:8处未定义的属性“ setState”

我认为问题在于:

axios getNewQuote导出或componentDidMount中的getNewQuote调用

有什么帮助吗?

reactjs axios

3
推荐指数
1
解决办法
3412
查看次数

无法通过重构更改 StateHandlers 的状态

我有这个按钮并使用recompose中的StateHandlers进行操作。目标只是将按钮状态从 active: false更改为 active: true

const EnhancedButton = withStateHandlers(
  ({ initialState = false }) => ({
    active: initialState
  }),
  {
    onTrigger: ({ active }) => ({
      active: true
    })
  }
)(({ active, onTrigger, children, id }) => {
  console.log(active)
  return (
    <Button
      onClick={() => onTrigger()}
      toggle
      active={active}
      size="massive"
      style={styles.button}
      as={Link}
      to={`/${id}`}
    >
      {children}
    </Button>
  )
})
Run Code Online (Sandbox Code Playgroud)

我点击按钮,然后我被重定向到新页面,然后我返回,按钮仍然处于活动状态: false我希望它处于 活动状态: true

reactjs recompose react-router-v4

3
推荐指数
1
解决办法
2291
查看次数

如何在捕捉时“捕捉滚动”并触发事件?

我尝试使用scroll-snap在表示方面效果很好的 CSS 属性。

但我需要在滚动/捕捉时触发一个事件。我怎样才能做到这一点?

javascript css

2
推荐指数
1
解决办法
909
查看次数

如何使用带有语义ui Menu.Item的react-router Link?

我有这个:

  <Link to="/">
    <Menu.Item name='expense List' active={activeItem === 'expense List'} onClick={this.handleItemClick} />
  </Link>
Run Code Online (Sandbox Code Playgroud)

但我在控制台中收到错误消息:

Warning: validateDOMNesting(...): <a> cannot appear as a descendant of <a>.
    in a (created by MenuItem)
    in MenuItem (at Header.js:26)
    in a (created by Link)
    in Link (at Header.js:25)
    in div (created by Menu)
    in Menu (at Header.js:22)
    in div (at Header.js:20)
    in Header (at AddExpense.js:8)
    in div (at AddExpense.js:7)
    in AddExpense (created by Route)
    in Route (at index.js:20)
    in Switch (at index.js:18)
    in Router (created by …
Run Code Online (Sandbox Code Playgroud)

reactjs semantic-ui react-router

1
推荐指数
1
解决办法
2936
查看次数