小编Goo*_*mja的帖子

如何访问React路由器中的历史堆栈?

我正在尝试访问反应路由器的历史堆栈。

这是我想做的:

我使用react.js 和react-router 创建一个板。

如果用户单击板上的列表之一,则会转到详细信息页面。

假设用户点击列表中 id 为 3 的文章,react-router 会转到 id 3 文章的详细信息页面,url 形式如下。

localhost:3000/board/3
Run Code Online (Sandbox Code Playgroud)

在详细信息页面中,有一个转到列表按钮,当用户单击它时,页面将再次移动到列表页面,我将在这里使用history.back()

到目前为止,使用react-router 就很容易做到了。

但是,用户可以访问另一个页面的详细信息页面,例如个人资料页面。

如果用户通过个人资料页面访问详细信息页面,则转到列表按钮的行为应该有所不同。它将用户推送到用户列表页面。

总而言之,转到列表按钮的工作原理如下:

board -> detail -> click go to the list -> board
profile -> detail -> click go to the list -> user-list
Run Code Online (Sandbox Code Playgroud)

为了根据用户所在的位置将用户推送到不同的页面,我需要查看用户来自哪里,因此我需要查看历史堆栈,或者是否有其他方法可以检查用户来自哪个网址?

reactjs react-router

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

如何使用反应钩子检测 Next.js SSR 中的窗口大小?

我正在使用 Next.js 和react-dates构建一个应用程序。

我有两个组件DateRangePicker组件和DayPickerRangeController组件。

当窗口的宽度大于1180px时,我想渲染DateRangePicker,如果尺寸小于这个,我想渲染DayPickerRangeController

这是代码:

      windowSize > 1180 ?
           <DateRangePicker
             startDatePlaceholderText="Start"
             startDate={startDate}
             startDateId="startDate"
             onDatesChange={handleOnDateChange}
             endDate={endDate}
             endDateId="endDate"
             focusedInput={focus}
             transitionDuration={0}
             onFocusChange={(focusedInput) => {
               if (!focusedInput) {
                 setFocus("startDate")
               } else {
                 setFocus(focusedInput)
                }
               }}
                /> :
             <DayPickerRangeController
               isOutsideRange={day => isInclusivelyBeforeDay(day, moment().add(-1, 'days'))}
               startDate={startDate}
               onDatesChange={handleOnDateChange}
               endDate={endDate}
               focusedInput={focus}
               onFocusChange={(focusedInput) => {
               if (!focusedInput) {
                 setFocus("startDate")
                 } else {
                  setFocus(focusedInput)
                 }
               }}
              /> 
          }
Run Code Online (Sandbox Code Playgroud)

我通常使用反应钩与窗口对象检测窗口屏幕宽度像

但是我发现ssr的时候这种方式是不可用的,因为ssr渲染没有window对象。

无论ssr如何,是否有另一种方法可以安全地获得窗口大小?

reactjs server-side-rendering next.js react-dates

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

React.js 中的 useMemo 钩子也可以记忆对象引用吗?

这是 React.js 中关于 useMemo hook 的常见解释

\n
useMemo(compute, dependencies) invokes compute, memoizes the calculation result, and returns it to the component.\n\nIf during next renderings the dependencies don\xe2\x80\x99t change, then useMemo() doesn\xe2\x80\x99t invoke compute but returns the memoized value.\n\n- Dmitri Pavlutin\n
Run Code Online (Sandbox Code Playgroud)\n

但是,我看到 useMemo 挂钩的示例返回如下所示的数组。

\n
React.useMemo(() => [1, 2, 3], []);\n
Run Code Online (Sandbox Code Playgroud)\n

如您所见,useMemo 返回一个数组,该数组在 Javascript 中被视为对象。

\n

这很令人困惑。我认为 useMemo 钩子的用法是为了记忆计算值。

\n

所以我做了一些测试来弄清楚 useMemo 与对象是如何工作的

\n
const Child = React.memo(({ obj }) => {\n\n  console.log('this is child component')\n\n  return <div>Child Component</div>\n})\n\nconst …
Run Code Online (Sandbox Code Playgroud)

reactjs react-hooks

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

context="module" 在 Svelte 和 Sapper 中如何工作?

每当我从服务器获取数据时,我都使用 Sapper 构建项目时,预加载函数在 script context="module" 内声明,如下所示。

<script context="module">
  export async function preload(page) {
    return await this.fetch(`https://reqres.in/api/users?page=1`)
    .then(res1 => {
      return res1.json()
    }).then(res2 => {
      return { 
        notices: res2.data,
      }
    })
  }
</script>
Run Code Online (Sandbox Code Playgroud)

根据文件

A <script> tag with a context="module" attribute runs once when the module first evaluates, rather than for each component instance. 
Run Code Online (Sandbox Code Playgroud)

但是当模块第一次评估时是什么意思?

这是否意味着组件首次呈现时?那么和下面的代码一样在 onMount 生命周期方法中声明 api fetch 函数不一样吗?

<script>
  onMount(async() => {
    const res = await fetch(`https://reqres.in/api/users?page=1`);
    const json = await res.json();
  })
</script>
Run Code Online (Sandbox Code Playgroud)

svelte sapper

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

如何在 Next.js 中更改路线而不重新渲染?

我创建了一个过滤器,当我单击确认按钮时,它会更改 url。

例如,当我单击第 1 页并在巴黎放置类型宾馆时,网址如下所示。

http://localhost3000/findstay?page=1&per=10&place_type=guest_house&city=paris
Run Code Online (Sandbox Code Playgroud)

现在我想改变 url 更改时的结果。假设当我手动更改查询参数(如下所示)时,过滤器也应该更改。

http://localhost3000/findstay?page=1&per=10&place_type=hotel&city=newYork
Run Code Online (Sandbox Code Playgroud)

为此。我在页面文件夹中创建了一个文件名findstay ,并在组件文件夹内创建了findstay-filter组件。

import React from "react";
import FindstayFilter from "@/components/findstay/findstay-filter";

interface IFindstayProps { };

const Findstay: React.FC<IFindstayProps> = () => {
  return <FindstayFilter />;
};

export default Findstay;
Run Code Online (Sandbox Code Playgroud)

我解释的所有逻辑都写在FindstayFilter组件内部。

这是渲染FindstayFilter时推送 url 的代码。

 useEffect(() => {
    const { city, page, per, placeType } = query;
    const _page = parseInt(page || 1 as any);
    const _city = city || state.cityState; // paris
    const _placeType = placeType …
Run Code Online (Sandbox Code Playgroud)

reactjs next.js

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

每次组件在 React.js 中呈现时,useCallback 钩子都会创建一个函数吗?

在求职面试中,有人问我如何在 React 中优化组件。

所以我用一个使用useCallbackuseMemo钩子的例子来回答。

因为每当组件重新渲染时,组件内部声明的函数和变量都是新创建的,这会导致这些新创建的值占用内存空间。

然而,在这两个钩子的帮助下,可以节省内存,因为使用useCallbackuseMemo可以防止通过保存和重用先前的结果来一次又一次地创建函数和变量,只要依赖数组中的状态没有改变在组件重新渲染期间。

到目前为止,这是我的答案。但是面试官说useCallback不阻止创建函数。即使使用了useCallback,仍然会创建一个函数。

我不明白这部分。在 useCallback 钩子中如何再次创建该函数?

我对useCallbackuseMemo有什么遗漏吗?

reactjs react-hooks

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

在 if 语句中使用 react hook 更新多个状态的更好方法?

我正在制作一个简单的应用程序,用户可以增加或减少成人、儿童和婴儿的数量。

我想在一个状态中管理这些状态作为一种对象形式,如下所示。

  const [numberState, setNumberState] = useState({
    adultCount: 0,
    childCount: 0,
    babyCount: 0
  });
Run Code Online (Sandbox Code Playgroud)

下面的代码是用户可以增加或减少成人,儿童和婴儿数量的部分。

            <div className="tit">Number</div>
                <dl>
                    <dt><span>Adult</span></dt>
                        <dd>
                            <div className="number_count">
                                <button type="button" className="btn_minus" onClick={() => handleNumberState("adult", "minus")}>minus</button>
                                <span className="input-num"><input type="number" value={adultCount} /></span>
                                <button type="button" className="btn_plus" onClick={() => handleNumberState("adult", "plus")}>plus</button>
                            </div>
                        </dd>
                    <dt><span>Child</span></dt>
                        <dd>
                            <div className="number_count">
                                <button type="button" className="btn_minus" onClick={() => handleNumberState("child", "minus")}>minus</button>
                                <span className="input-num"><input type="number" value={childCount} /></span>
                                <button type="button" className="btn_plus" onClick={() => handleNumberState("child", "plus")}>plus</button>
                            </div>
                        </dd>
                    <dt><span>Baby</span></dt>
                        <dd>
                            <div className="number_count">
                                <button type="button" className="btn_minus" onClick={() => handleNumberState("baby", "minus")}>minus</button>
                                <span …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs

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

如何在javascript中将对象数组转换为数组对象?

我正在尝试使用 javascript 将对象数组转换为数组对象。

这是代码

const data = [{
  yearMonthKey: "201907",
  dayKey: "15",
  startDate: "2019-07-15 00:00:00+0900",
  title: "testProgrma"
},
             {
  yearMonthKey: "201907",
  dayKey: "15",
  startDate: "2019-07-15 00:00:00+0900",
  title: "testProgrma"
},
            {
  yearMonthKey: "201907",
  dayKey: "16",
  startDate: "2019-07-15 00:00:00+0900",
  title: "testProgrma12313"
},
            {
  yearMonthKey: "201908",
  dayKey: "15",
  startDate: "2019-07-15 00:00:00+0900",
  title: "testProgrma"
}]

let programs = {};

Run Code Online (Sandbox Code Playgroud)

我想使用程序对象来制作一个对象,如下所示。

{
  201907: {
    15: [{
      yearMonthKey: "201907",
      dayKey: "15",
      startDate: "2019-07-15 00:00:00+0900",
      title: "testProgrma"
    },
        {
      yearMonthKey: "201907",
      dayKey: "15",
      startDate: "2019-07-15 …
Run Code Online (Sandbox Code Playgroud)

javascript arrays object

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

点表示法在 React.js 的函数组件中如何工作?

当我搜索有关复合组件模式的文章时,我发现可以像 javascript 对象一样通过点表示法访问子组件。

这怎么可能以及它是如何运作的?这是否有效,因为组件也是 javascript 的对象?

const App = () => (
  <Menu>
    <Menu.Item>Home</Menu.Item>
    <Menu.Item>Blog</Menu.Item>
    <Menu.Item>About</Menu.Item>
  </Menu>
);
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-functional-component

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